4.5.5 📌 전처리 메소드의 활용
프로그래밍 코드를 통해 화면을 전환하는 방식은 어렵고 난이도가 높지만 자유도가 높다.
그래서 선호도가 높은 방식이다.
반면 세그웨이를 이용하여 화면을 전환하는 방식은 쉽고 간단하지만 자유도가 제한된다.
세그웨이를 이용해 화면을 전환하는 과정에서 특별한 처리를 해주어야하는 경우는 어떻게 할까?
이 경우 코코아 터치 프레임워크가 세그웨이를 실행하기 전에 전처리 메소드 ( Pre-Process-Method )를 호출한다.
세그웨이를 실행하기 전에 값을 저장해 둘 필요가 있거나, 경고창을 띄워주는 등의 처리를 할 경우 전처리 메소드에 내용을 적어놓으면
세그웨이가 실행되기 전에 자동으로 실행된다.
주의할 점은 이 메소드는 우리가 호출하고 싶을 때 호출되는 것이 아니라 알아서 시스템이 호출한다는 점이다.
우리가 직접 쏘는 총이 아니라 지뢰같은 메소드라고 보면 된다.
prepare(for: <UIStoryboardSegue>, sender: <Any?>)
첫 파라미터로는 호출한 세그웨이 객체를 전달한다.
뷰 컨트롤러에 연결된 세그웨이가 여러 개가 될 수 있는데 이 세그웨이들은 실행될 때 전처리 메소드를 공통적으로 호출한다.
하나의 전처리 메소드를 여러 세그웨이가 공유하는 방식이다.
때문에 어느 세그웨이가 실행되어 호출한 것인지를 첫 파라미터로 알려주는 것이다.
두 번째 파라미터로는 세그웨이를 실행하는 트리거에 대한 정보이다.
하나의 세그웨이는 여러 개의 트리거를 가질 수 있기 때문이다.
만약 액션 세그웨이라면 버튼이나 테이블 셀, 제스처등의 객체를 넘겨주고
메뉴얼 세그웨이라면 뷰 컨트롤러 자신이 파라미터 값으로 전달된다.
전처리 메소드는 UIViewController 클래스에 이미 정의되어 있기 때문에 오버라이드하여 사용한다.
import UIKit
class ViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
NSLog("세그웨이가 곧 실행됩니다.")
}
}
뷰 컨트롤러 파일에 전처리 메소드인 prepare메소드를 오버라이드해서 구문을 추가한다.
NSLog는 파운데이션 프레임워크에 정의된 클래스로 디버그 콘솔에 출력하는 기능을 한다.
값을 확인하기 위해 사용된다.
세그웨이를 실행하면 콘솔에 NSLog가 뜨는 것을 볼 수 있다.
여러 개의 세그웨이가 있을 때 전처리 메소드에서 구분하는 방법
2개의 세그웨이가 설정되어 있고 위는 커스텀 아래는 프레젠트 세그웨이이다.
커스텀 세그웨이를 설정하고 identifier에서 custom_segue라고 입력해준다.
액션세그웨이는 action_segue라고 입력한다.
import UIKit
class ViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let identifier = segue.identifier else {
return
}
NSLog("identifier : \(identifier)")
}
}
identifier가 없을 수 있기 때문에 옵셔널로 값이 나오게 된다.
guard let 으로 언래핑하여 출력하면 아래처럼 출력된다.
이러면 어떤 세그웨이 방식으로 이동했는지를 콘솔창을 통해서 알 수 있다.
전처리 메소드는 언제 사용되나?
전처리 메소드는 대부분 다음 화면으로 값을 전달하는 데에 사용된다.
현재의 화면에서 입력된 값을 넘기거나, 사용자가 선택한 값을 넘기는 데 사용된다.
'Swift > 꼼꼼한 재은씨 기본편' 카테고리의 다른 글
[꼼꼼한 재은씨 기본편 Chapter 05] 다른 뷰 컨트롤러와 데이터 주고받기 ( 동기 방식 ) (0) | 2024.07.10 |
---|---|
[꼼꼼한 재은씨 기본편 Chapter 04] 화면 전환 - 커스텀 세그웨이 (0) | 2024.07.08 |
[꼼꼼한 재은씨 기본편 Chapter 04] 화면 복귀 - Unwind (2) | 2024.07.05 |