[Swift] ViewController로 메모 앱 만들기(6) : 이전화면으로 이동(popViewController, dismiss, Unwind Segue)

Oni·2023년 9월 4일
0

TIL

목록 보기
22/47
post-thumbnail

원문 포스팅 🔗

메모를 삭제하는 기능을 구현하던 중에 디테일 페이지에서 삭제 버튼을 누르면 화면간 이동이 없어 삭제된 메모가 화면에 그대로 남아있는 문제가 있었다. 해당 문제를 해결하기 위해 이전화면으로 돌아가는 기능을 수행하는 화면 전환 메서드에 대해 정리하고 내 코드에 알맞은 방법을 적용하고자 한다.


화면 전환 메서드

화면 전환 메서드란 iOS 앱을 개발할 때 화면간 전환을 처리하는 메서드를 의미한다. 이전화면으로 돌아가거나, 데이터의 전달을 처리할 때 사용되기도 한다. 화면을 전환할 수 있는 방법은 크게 세가지로 정리했다.

  • Navigation Controller - popViewController
  • Modal Presentation - dismiss
  • Unwind Segue

Navigation Controller를 사용하여 화면을 스택(Stack) 형태로 관리할 경우, popViewController(animated:)를 사용한다. 해당 메서드는 스택에서 가장 위에 있는 뷰 컨트롤러를 제거하고 이전 화면으로 돌아간다.

let delete = UIAlertAction(title: "메모 삭제", style: .default) { [self] (_) in
    self.myMemo.deleteMemo(at: prepareMemoIndex!)
    
    // delete를 누를 경우 이전 화면으로 이동
    self.navigationController?.popViewController(animated: true)
}

내 코드에서는 해당 메서드를 Alert 내 delete 버튼을 작동할 때 넣어야 하기 때문에 이 방법이 제일 알맞았다.

만약 다른 뷰 컨트롤러를 모달로 표시한 경우, dismiss(animated:completion:)를 사용한다.

// 예시코드
@IBAction func backButtonTapped(_ sender: UIButton) {
    dismiss(animated: true, completion: nil)
}

Unwind Segue

Unwind Segue는 Storyboard에서 사용되며, 이전 화면으로 화면 복귀를 처리하는 메커니즘을 제공한다. Unwind Segue를 사용하려면 이전 화면에서 메소드를 정의하고 해당 메소드를 Unwind Segue의 액션 메소드로 연결해야 한다.

// 예시코드
@IBAction func unwindToPreviousViewController(segue: UIStoryboardSegue) {
    // Unwind Segue의 액션 메소드는 아무 동작도 수행하지 않아도 됨
    // 이전 화면으로 돌아가는 작업은 시스템에서 처리
}
profile
하지만 나는 끝까지 살아남을 거야!

0개의 댓글