IN_SOPT_iOS_FirstAssignment

hello_hidi·2022년 10월 8일
0
post-thumbnail


과제를 하면서 배우고 느끼고 아쉬웠던 점을 정리하려고 한다.

1) 화면 구성

  1. 기본적으로 배운 UIComponent를 활용해서 배워서 구성했고 거기에 속성들을 조금 추가하면서 (UILable의 numberofLines) 완성도있게(?) 만드려고 노력했다.
  2. 근데 CGRect로 좌표 찾아서 위치시키는거 뭔가 분명히 뭔가 나중에도 이렇게 프로그래밍 하는건지? 계속 simulator 보면서 자리 맞추는게 좀 힘들었다. 분명히 뒤에 세미나에서 배울 거 같고 그때가서 '와 이런게 있었어?'를 더 느끼고 싶어서 악바리로 좌표 찍으면서 했다. 진짜 절대 찾기 싫어서 그런거 아님!
  3. TextField의 borderStyle에 있을 줄 알았는데 (Flutter에 있었는데 쩝..) 생각보다 복잡하게? 저 밑줄을 만드러야 되더라고요. 그 코드만 한번 설명하고 넘어가겠습니다.

TextField 밑줄 만들기

나는 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

2) modal, Navigation 방식으로 전환

  1. present, push하는 건 딱히 어렵지 않았다. 세미나에서 배운 내용과 똑같았기 때문이다.
  2. 문제는 두번째화면에서 세번째화면으로 present로 넘어갔다가 dismiss를 하면 첫화면으로 가야되는데 계속 두번째 화면으로만 가는 것이다. 그 코드만 설명을 해보겠습니다.

여러개의 view controller pop하기

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 시켜줘야 한다.

3) 데이터 전달

  1. 진짜 개애애애애ㅐ애애애애애애ㅐ애애애애애애애 짜증났다. 기본적으로 데이터를 넘기는 건 되는데 문제는 값만 넘기면 세번째화면의 버튼이 눌리지 않는 현상이 발생하는 거도 계속 구글링하고 찾아봤는데도 안되길래 결국 아빠짱께 물어봐서 문제를 해결할 수 있었다. 그 부분을 설명해보겠다.

lazy component

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
    }()
profile
안뇽희디

0개의 댓글