개발하는 동글 :]

[TIL],[UIKit],[Essue],[ButtonTitle이 변경되지 않는 이슈] 본문

카테고리 없음

[TIL],[UIKit],[Essue],[ButtonTitle이 변경되지 않는 이슈]

동글하다 2023. 10. 5. 00:20

1. 문제 상황

  • Observable
class Observable<T> {

    var value: T {
        didSet {
            listener?(value)
        }
    }

    private var listener: ((T) -> Void)?

    init(_ value: T) {
        self.value = value
    }

    func bind(_ closure: @escaping (T) -> Void) {
        closure(value)
        listener = closure
    }
}
  • ViewModel
final class FTOPViewModel {
    var rangeBTtitle: Observable<String> = Observable("단어장 선택")
    var vocaList: Observable<[VocabularyEntity]> = Observable([])
}
  • bind
        viewModel.vocaList.bind { [weak self] list in
            guard let self = self else {return}
            if list.isEmpty {
                viewModel.rangeBTtitle.value = "단어장 선택"
            } else {
                viewModel.rangeBTtitle.value = "총 \(viewModel.vocaList.value.count)개의 단어장"
            }
        }
        viewModel.rangeBTtitle.bind { [weak self] text in
            DispatchQueue.main.async { [weak self] in
                guard let self = self else {return}
                self.rangeButton.setTitle(text, for: .normal)
            }
            
            print("$$$\(text)")
        }
위와 같이 배열이 변경됨에 따라 버튼의 타이틀을 변경하려 하였으나 버튼의 타이틀이 변경되지 않는 이슈가 발생하였다.

위와 같이 print문을 통하여 text가 찍히는 것을 확인해 보았는데 text는 잘 전달이 된다. 심지어 버튼이 아닌 일반 라벨에 텍스트를 변경하는 것은 문제없이 된다.

2. 시도 방법

  • rangebutton이 커스텀 버튼이기에 일반 UIButton으로 변경하여 시도
  • 단어장 선택의 modal의 높이를 기존의 높이와 동일하게 만들기
  • main큐에 넣어서 하기
  • setTitle 말고 rangeButton.titleLabel?.text 변경하기

3. 시도해 볼 방법

  • button이 아니라 label로 시도하기

4. TIL

1. 오늘의 회고

  1. 제네릭의 사용 및 observable pattern 사용연습을 위해 observable 클래스를 만들어 사용을 연습해 보았다.
  2. 프로젝트의 담당 부분을 작업하였다.

2. 내일의 목표

  1. 연휴기간 TIL을 소홀히 하였다! 꾸준히 TIL작성하기!
  2. 팀프로젝트 담당 기능 구현
  3. 현 이슈 해결하기
  4. 팀프로젝트 발표 준비