하나의 view controller에서 다른 view controller로의 전환을 의미
UIButton
을 클릭하면, 새로운 view로 전환되는 segue 생성
- 새로운 view controller에 아무 class도 할당하지 않은 경우,
UIViewController
instance와 연결되어 있다.
segue의 property
identifier
destination
UIViewController
타입UIViewController
의 subclass로 downcast하여 사용한다.새로운 view가 아래에서 위로 올라오며 이전 view를 가린다.
view 제거 방법
- Unwind Segue
버튼을 Exit object와 연결시킨 후, 팝업에서
unwindToRedWithUnwindSegue
를 선택해 unwind segue를 생성한다.// UIStoryboardSegue parameter: Interface Builder에게 해당 view가 unwind segue를 만들 준비가 되었음을 알림 @IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) { // 새로운 view -> 이전 view 로 정보를 전달할 수 있다. }
navigation controller와 함께 쓰이며, 새로운 view로 화면이 전환된다.
navigation controller가 추가되기 전까진 present modally와 동일하게 동작한다.
stack 구조로 root view controller 위에 다른 view controller들이 push되고, 뒤로가기를 누르면 가장 최근에 push된 view가 pop된다.
계층적 구조로 push 할수록 점점 깊은 계층으로 들어가고, pop 할수록 다시 root쪽으로 되돌아온다.
ex) iOS 기본 Setting 앱
UIViewController
는 navigation bar를 설정하는 navigationItem
이 생성된다.Title: navigation bar의 제목
Back Button: 현재 view로 돌아가는 Back 버튼의 제목
이외에도, Object library를 통해 navigation item을 추가할 수 있다.
Navigation Bar의 속성 중 Prefers Large Titles를 체크하면 navigation bar의 title이 커진다.
root view controller를 포함한 모든 view controller의 title 크기가 커진다.
각 view controller의 navigation item 옵션을 통해 하위 view controller의 제목 크기를 조정할 수 있다.
하나의 view controller에서 다른 view controller로 정보를 전달한다.
해당 view controller에 위치한 segue가 실행되기 전에 호출된다.
모든 UIViewController
는 prepare(for:sender)
메서드를 가진다.
prepare(for segue: UIStoryboardSegue, sender: Any?)
- 하나의 segue만 존재하여
identifier
생략title
property는 모든UIViewController
가 가지고 있으므로 downcast 생략override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // 하위 view 제목을 상위 view의 텍스트 필드 값으로 설정 segue.destination.navigationItem.title = textField.text }
해당 view controller에 있는 특정 segue를 실행
withIdentifier
: 실행시킬 segue의 identifiersender
: segue에 넘겨줄 추가적인 정보
- 출발지의 view controller 아이콘과 도착지의 화면을 연결
// yello button을 터치했을 경우 @IBAction func yellowButtonTapped(_ sender: Any) { // switch가 on 상태라면 Yellow segue 실행 if segueSwitch.isOn { performSegue(withIdentifier: “Yellow”, sender: nil) } }
해당 view controller의 segue가 실행되기 직전에 호출되어, 반환값이 true
인 경우에만 segue가 실행된다.
performSegue(withIdentifier:sender:)
를 사용하여 segue를 호출할 경우 호출되지 않는다.
performSegue(withIdentifier:sender:)
로 호출된 segue는 shouldPerformSegue(withIdentifier:sender:)
의 반환값과 관계없이 항상 호출된다.)// switch가 on일 경우에만 segue 실행
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
return segueSwitch.isOn
}