Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발_:)새발

[Swift] 화면 전환 [3/3] (Segue) 본문

iOS/swift

[Swift] 화면 전환 [3/3] (Segue)

sylii_:) 2019. 8. 12. 17:25

# 세그란?

세그는 스토리보드에서 뷰 컨트롤러 사이의 화면 전환을 위해 사용하는 객체입니다. 별도의 코드 없이도 스토리보드에서 세그를 연결하여 뷰 컨트롤러 사이의 화면 전환을 구현할 수 있습니다.

 

# 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

An encapsulation of the design-time view controller graph represented in an Interface Builder storyboard resource file.

developer.apple.com

UIStoryboardSegue - UIKit | Apple Developer Documentation

 

 

View Controller Programming Guide for iOS: Using Segues

View Controller Programming Guide for iOS

developer.apple.com

View Controller Programming Guide for iOS: Using Segues

 

 

 

iOS - Unwind Segue in Swift

이 글은 iOS에서 Unwind segue를 만드는 방법에 관한 내요입니다.

medium.com

 Unwind Segue in Swift

Comments