본문 바로가기

야곰커리어캠프_TIL

20220225 / D13 / 화면전환(navigation&modality) 구현 및 데이터공유 + Alert구현

# modality 방식

  1. 스토리보드 ViewController의 indentifer Inspector로 들어가서 identifier를 기입한다. (본인으로 지정된 class명으로하면 구별이 쉽다)
  2. 첫번째 ViewController class내에서 이동하고자하는 secondViewController의 인스턴스를 생성하는 함수를 만든다
  3. 실행을한다. (만약 버튼을 클릭시 이동시키고 싶다면 버튼을 끌어와 @IBAction 함수내에 코드를 구현해도 좋을것같다.)
// firstViewController에서 작성한 코드이다.
func moveSecondViewController() {
      guard let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") else { return }
      self.present(secondViewController, animated: true, completion: nil)
}
 

# navigation 방식

위와 동일

// firstViewController에서 작성한 코드이다.
func moveSecondViewController() {
      guard let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") else { return }
      navigationController?.pushViewController(secondViewController, animated: true)
}
 

segue방식을 통해 데이터 공유

  1. 스토리보드상에서 firstViewController와 secondViewController을 segue로 연결을 해준다.
  2. segue의 identifier를 적어준다.
  3. override된 prepare메서드를 호출한다.
  4. 스토리보드에서 지정해놓은 segue의 identifier가 맞는지 먼저 확인한다.
  5. navigationViewController는 두개의 스토리보드로 연결이되어있음 고로 먼저 navigationController인지를 확인해주고 다운캐스팅을하여 바인딩하여 값을 상수에 담는다.
  6. 마지막으로 이동하고자 하는 navigationController가 topView인지 확인한다.(stack구조라서 맨마지막에 나오는 화면이 topView임)
  7. secondViewController의 인스턴스를 생성하고 그 class내에 있는 프로퍼티에 접근하여 firstViewController의 프로퍼티값을 할당하는것이다.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard segue.identifier == "secondViewController" else { return }
        if let navigationController = segue.destination as? UINavigationController,
           let secondViewController = navigationController.topViewController as? secondViewController {
            secondViewController.strawberryCount = self.strawberryStockLabel.text ?? ""
        }
    }
 
 

Alert구현

  1. UIAlertController(title, message, preferredStyle)을 선택하는 인스턴스를 생성한다.
  2. Alert 띄울때 누를 Action 버튼인스턴스를 생성해준다.
  3. AlertAction인스턴스를 UIAlertController인스턴스에 할당해준다.
  4. present()메서드내 UIAlertController인스턴스를 추가해준다.
func showAlert() {
        let alertViewController =
        UIAlertController(title: "투자손실"
                          message: "현재마이너스 -30%입니다 손절하시겠습니까 ?",
                          preferredStyle: .alert)
        let okAction = UIAlertAction(title: "예",
                                     style: .default) { _ in
            //여기에는 얼럿버튼에서 '예'버튼을 누를시 실행될 구현부이다.
            self.moveSecondViewController()
        }
        let noAction = UIAlertAction(title: "아니오",
                                     style: .default, handler: nil)
        // 구현한 UIAlertAction인스턴스를 add추가한다. (최대 2개까지만 가능)
        alertViewController.addAction(okAction)
        alertViewController.addAction(noAction)
       // 만들어놓은 AlertViewController인스턴스를 전달해준다.
        present(alertViewController, animated: true, completion: nil)
}