개발_:)새발
[Swift] 화면 전환 [3/3] (Segue) 본문
# 세그란?
세그는 스토리보드에서 뷰 컨트롤러 사이의 화면 전환을 위해 사용하는 객체입니다. 별도의 코드 없이도 스토리보드에서 세그를 연결하여 뷰 컨트롤러 사이의 화면 전환을 구현할 수 있습니다.
# UIStoryboardSegue 클래스
UIStoryboardSegue 클래스는 UIKit에서 사용할 수 있는 표준 화면 전환을 위한 프로퍼티와 메서드를 포함하고 있습니다. 또 커스텀 전환을 정의하기 위해 서브클래스를 구현해서 사용할 수도 있습니다. 필요에 따라서 UIViewController의 performSegue(withIdentifier:sender:) 메서드를 사용하여 세그 객체를 코드로 실행할 수 있습니다.
세그(Segue) 객체는 뷰 컨트롤러의 뷰 전환과 관련된 정보를 가지고 있습니다. 세그는 뷰 컨트롤러의 뷰를 다른 뷰 컨트롤러의 뷰로 전환할 때 뷰 컨트롤러의 prepare(for:sender:) 메서드를 사용하여 새로 보이는 뷰 컨트롤러에 데이터를 전달할 수 있습니다.
- 주요 프로퍼티
- var source: UIViewController: 세그에 전환을 요청하는 뷰 컨트롤러입니다.
- var destination: UIViewController: 전환될 뷰 컨트롤러입니다.
- var identifier: String?: 세그 객체의 식별자입니다.
- 주요 메서드
- func perform(): 뷰 컨트롤러의 전환을 수행합니다.
# 인터페이스 빌더의 세그 연결
1. 스토리보드에서 전환될 뷰 컨트롤러를 객체 라이브러리로부터 드래그 앤 드롭으로 추가합니다.
2. 기존 뷰 컨트롤러의 뷰와 구분하기 위하여 새롭게 생성된 뷰 컨트롤러의 뷰를 선택하여 배경색을 변경해줍니다.
3. 첫 번째 뷰 컨트롤러의 뷰 위에 객체 라이브러리로부터 버튼을 추가하고 역할을 알려주기 위하여 'Show blue view controller'로 title을 변경해줍니다.
4. 버튼에서부터 키보드의 control키를 누른 상태로 드래그하여 전환될 뷰 컨트롤러에 드롭하여 연결합니다.
5. 세그의 종류 중 Show를 선택합니다. (Show 세그는 iOS에서 현재 기기나 화면 상태에서 가장 적절한 화면 전환 방식을 판단하여 화면을 전환해줍니다.)
6. 두 뷰컨트롤러 사이에 세그가 생성된 것을 확인할 수 있습니다.
7. 시뮬레이터를 실행하여 버튼을 눌러보면 두 번째 뷰 컨트롤러의 뷰로 전환되는 것을 확인할 수 있습니다.
# Segue의 종류
세그웨이를 할 때는 늘 새로운 인스턴스 객체가 생성된다는 것을 주의해야 합니다.
- show가장 일반적인 세그웨이입니다. 새로운 화면으로 이동합니다. Stack구조로서 새 화면이 원래 화면 위를 덮는 구조입니다.
- Show DetailSplitView 구조에서 원래 화면을 Master, 새 화면을 Detail로 표시합니다. 아이폰에서는 똑같아 보이지만 아이패드에서는 화면이 둘로 분할돼서 보이게 됩니다.
- Present Modally새 화면이 모달처럼 원래 화면 위 전체를 뒤덮습니다. 원래 화면은 새 화면 뒤에 그대로 존재하게 됩니다.
- Popover Presentation아이패드에서 팝업창을 띄웁니다. 아이폰 앱한테는 Show Detail과 마찬가지로 큰 의미가 없습니다.
- Custom사용자 정의 세그웨이를 만듭니다.
# Unwind Segue
Unwind Segue는 View가 쌓여있을 때 지정한 곳으로 화면을 되돌리는 역할을 합니다. pop과 dismiss를 한번 해서는 되돌아 갈 수 없는 곳으로도 갈 수 있습니다.
1. first view에 second view로 진행하는 액션과 UIStoryboardSegue를 파라미터 받는 IBAction을 만듭니다.
@IBAction func unwindVC1 (segue : UIStoryboardSegue) {}
2. Unwind를 하고자 하는 3번 ViewController가 존재하는 Storyboard에서 Control 키를 누른 채, 아래와 같이 클릭된 ViewController 아이콘에서 Exit으로 드래그하면 1번 ViewController에서 선언한 함수가 팝업에 뜹니다. 팝업에 뜬 segue를 클릭합니다.
3. 선언된 Unwind segue를 클릭하여 오른쪽 사이드 바에서 identifier를 선언해줍니다.
4. 3번 ViewController에서 아래의 코드를 선언해주면 Unwind Segue 구현이 완료됩니다.
@IBAction func goTo1(_ sender: UIButton) {
performSegue(withIdentifier: “unwindToVC1”, sender: self)
}
이 과정을 마치면 3번 View에서 어떠한 경우에도 1번 View로 이동하게 됩니다.
참고 링크
UIStoryboardSegue - UIKit | Apple Developer Documentation
View Controller Programming Guide for iOS: Using Segues
Unwind Segue in Swift
'iOS > swift' 카테고리의 다른 글
[Swift] Target-Action 디자인 패턴 (0) | 2019.08.12 |
---|---|
[Swift] Singleton 디자인패턴 (0) | 2019.08.12 |
[Swift] Delegation 디자인 패턴 (0) | 2019.08.12 |
[Swift] 화면 전환 [2/3] (Modal) (0) | 2019.08.12 |
[Swift] 화면 전환 [1/3] (Navigation Interface) (0) | 2019.08.12 |