과제를 하면서 배우고 느끼고 아쉬웠던 점을 정리하려고 한다.
- 기본적으로 배운 UIComponent를 활용해서 배워서 구성했고 거기에 속성들을 조금 추가하면서 (UILable의 numberofLines) 완성도있게(?) 만드려고 노력했다.
- 근데 CGRect로 좌표 찾아서 위치시키는거 뭔가 분명히 뭔가 나중에도 이렇게 프로그래밍 하는건지? 계속 simulator 보면서 자리 맞추는게 좀 힘들었다. 분명히 뒤에 세미나에서 배울 거 같고 그때가서 '와 이런게 있었어?'를 더 느끼고 싶어서 악바리로 좌표 찍으면서 했다. 진짜 절대 찾기 싫어서 그런거 아님!
- TextField의 borderStyle에 있을 줄 알았는데 (Flutter에 있었는데 쩝..) 생각보다 복잡하게? 저 밑줄을 만드러야 되더라고요. 그 코드만 한번 설명하고 넘어가겠습니다.
나는 CALayer()을 활용해서 밑줄을 그렸는데 CALayer에 대한 자세한 내용은 여기를 참고하고 CALayer의 특징인 여러개의 Subview를 두어서 화면에 그림을 그릴 수 있기 때문에, UITextField에 CALayer()을 선언하여 밑줄을 그렸다.
let border = CALayer()
border.frame = CGRect(x: 0, y: textField.frame.size.height-17,
width: textField.frame.width, height: 1)
border.backgroundColor = UIColor.systemGray4.cgColor
- present, push하는 건 딱히 어렵지 않았다. 세미나에서 배운 내용과 똑같았기 때문이다.
- 문제는 두번째화면에서 세번째화면으로 present로 넘어갔다가 dismiss를 하면 첫화면으로 가야되는데 계속 두번째 화면으로만 가는 것이다. 그 코드만 설명을 해보겠습니다.
self.dismiss(animated: true) {
self.navigationController?.popToRootViewController(animated: true)
}
이게 나의 첫번째 코드였는데, 이 코드가 실행되지 않은 이유는 present 형식으로 이동한 뷰의 navigationController 에 접근하는 것이 문제가 되었기 때문이다.
@objc
private func touchupNextButton() {
guard let presentingVC = self.presentingViewController as? UINavigationController else { return } --- 1)
if self.navigationController == nil{
self.dismiss(animated: true) {
presentingVC.popToRootViewController(animated: false)
}
}
}
1)처럼 현재 뷰컨트롤러를 제공한 뷰컨트롤러 객체를(즉, 이전 뷰) 가져와서 presentingVC 를 대상으로 pop 시켜줘야 한다.
- 진짜 개애애애애ㅐ애애애애애애ㅐ애애애애애애애 짜증났다. 기본적으로 데이터를 넘기는 건 되는데 문제는 값만 넘기면 세번째화면의 버튼이 눌리지 않는 현상이 발생하는 거도 계속 구글링하고 찾아봤는데도 안되길래 결국 아빠짱께 물어봐서 문제를 해결할 수 있었다. 그 부분을 설명해보겠다.
private lazy var checkButton: UIButton = {
let button = UIButton(frame: CGRect(x: 20, y: 530, width: UIScreen.main.bounds.size.width - 40, height: 50))
button.setTitle("확인", for: .normal)
button.setTitleColor(.black, for: .normal)
button.titleLabel?.font = .systemFont(ofSize: 15, weight: .medium)
button.backgroundColor = .systemYellow
button.addTarget(self, action: #selector(touchupNextButton), for: .touchUpInside)
return button
}()