티스토리 뷰
전 포스팅에서 화면전환에 대해서 살짝 다뤘었는데요
이번 포스팅에서도 화면전환에 대해서 다루려고 합니다 !
Segue (세그)
Segue는 스토리보드에서 뷰 컨트롤러 사이의 화면전환을 위해 사용하는 객체입니다.
기존에 제가 보였드렸던 방식은 거의 코드로 (present, push) 했었는데 Segue의 경우
별도의 코드 없이도 스토리보드에서 세그를 연결하여 뷰 컨트롤러 사이의 화면전환을 구현할 수 있습니다.
UIStoryboardSegue Class
UIStoryboardSegue 클래스는 UIKit에서 사용할 수 있는 표준 화면전환을 위한 프로퍼티와 메서드를 포함하고 있습니다.
UIViewController의 performSegue(withIdentifier:sender:)메서드를 사용하여 세그 객체를 코드로 실행할 수 있습니다.
그리고 화면전환이 일어나기 직전에
뷰 컨트롤러의 prepare(for:sender:) 메서드를 사용하여 새로 보여지는 뷰 컨트롤러에 데이터를 전달할 수 있습니다.
주요 프로퍼티
- var source: UIViewController : 세그에 전환을 요청하는 뷰 컨트롤러입니다.
- var destination: UIViewController : 전환될 뷰 컨트롤러입니다.
- var identifier: String? : 세그 객체의 식별자입니다.
주요 메서드
- func perform() : 뷰 컨트롤러의 전환을 수행합니다.
Segue를 사용하는 방식에는 크게 2가지가 있습니다.
- 특정 뷰(Action이 가능한)에서 발생시키는 방법
- 전체 UIViewController 에서 발생시키는 방법
연결된 모습이고 저 중간에 화살표를 클릭하면 속성이 나오는데
Identifier로 컨트롤러 단에서 세그를 식별, 구분할 수 있습니다.
@IBAction func buttonAction(_ sender: UIButton){
performSegue(withIdentifier: "next", sender: nil)
}
UIButton에 Segue를 연결시킨 경우와 위의 코드처럼 Action을 연결해준 다음 performSegue(...) 를 실행하는 경우의
결과는 정확히 일치합니다.
실제로 돌려봐야죠?
그전에
식별하기 위해 두번째 뷰컨의 배경색을 바꾸고 넘어온 데이터를 확인하기 위한 라벨을 하나 달아주었습니다.
//ViewController.swift
//Segue 쏘는 쪽
...
@IBAction func buttonAction(_ sender: UIButton){
performSegue(withIdentifier: "next", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "next" {
if let destiVC = segue.destination as? SecondViewController{
destiVC.labelText = "Data~!"
}
}
}
...
//SecondViewController.swift
//Segue 받는 쪽
...
var labelText: String?
@IBOutlet weak var label: UILabel!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
label.text = labelText
}
...
'iOS' 카테고리의 다른 글
[iOS] Photos 프레임워크 톺아보기 (2) | 2019.08.10 |
---|---|
[iOS] Codable 톺아보기 (0) | 2019.08.01 |
[iOS] UITableView 톺아보기 - 3 (0) | 2019.08.01 |
[iOS] UITableView 톺아보기 - 2 (0) | 2019.08.01 |
[iOS] UITableView 톺아보기 - 1 (0) | 2019.08.01 |