공부한 내용을 정리한 글입니다.
문제
UIImageView 클릭 시 화면 전환되도록 구현
UIImageView를 클릭해 화면전환 액션을 수행하게 하기 위해서는 UITapGestureRecogniger를 사용해야 한다.
https://88yhtserof.tistory.com/40
storyboard를 사용해 tap할 imageView를 배치한 후 해당 imageView의 아울렛 변수를 생성한다.
@IBOutlet weak var img: UIImageView!
UITapGestureRecognizer의 객체 생성 후 tap한 뒤 할 액션을 함수 형태로 전달한다.
ImageView의 inUserInteractionEnabled 프로퍼티를 true로 설정하고, addGestureRecognizer 메서드를 통해 ImageView에 GerstureRecognizer을 할당 해준다.
func tapImageView() {
let recognizer = UITapGestureRecognizer(target: self, action: #selector(actionImageView))
img.isUserInteractionEnabled = true
img.addGestureRecognizer(recognizer)
}
전환할 화면을 위해 storyboard에 새 ViewController를 추가한다. 그리고 'ResultViewController'라는 이름으로 Cocoa Touch Class를 생성한다.
아까 만든 새 ViewController에 ResultViewController 클래스를 할당해주고, Storyboard Id도 'ResultViewController'로 지정한다.
recognizer에 할당해준 함수를 작성해보자.
먼저 select란?
Selector : 메서드를 식별할 수 있는 고유한 이름.
UIKit 내부에 Objective-C 런타임으로 실행되는 메서드가 Selector 타입의 파라미터를 가질 때 사용한다. 보통 #selector(함수)를 사용하여 인스턴스를 생성한다. 추가적으로, Selector를 생성할 때 전달할 인자인 함수는 @objc 키워드를 붙여 선언되어야 한다. 왜냐하면 앞서 언급했듯이 Selector가 Objective-C 런타임으로 실행되는 메서드의 전달인자로 들어가기 때문이다.
이어서 함수 내부에 화면 전환 기능을 구현해보자.
코드로 화면 전환 시 두 가지로 나눌 수 있는데, navigationController를 사용하는 방법과 present하는 방법이 있다.
오늘은 present하는 방법을 사용할 것이다.
storyboard Id를 사용해 원하는 ViewController를 찾아내어 instantiateViewController()를 통해 인스턴스화한다.
인스턴스화한 UIViewController를 각 타입에 맞는 ViewController, 즉 여기서는 ResultViewController로 다운캐스팅하면 해당 ViewController의 프러퍼티와 메서드를 사용할 수 있다.
다음으로 이렇게 생성한 인스턴스를 present에 인자로 전달하여 화면이 뜨도록 하자.
@objc func actionImageView() {
guard let resultViewController = self.storyboard?.instantiateViewController(identifier: "ResultViewController") as? ResultViewController else {return}
resultViewController.modalPresentationStyle = .fullScreen //화면 style 변경
present(resultViewController, animated: true, completion: nil)
}
UITapGestureRecognizer:
https://developer.apple.com/documentation/uikit/uitapgesturerecognizer
Selector:
https://woozzang.tistory.com/120
'iOS' 카테고리의 다른 글
[iOS] viewController Life Cycle 생명주기 (0) | 2022.03.20 |
---|---|
[iOS] 앱 내에서 인스타그램 실행하기 (범용링크 Universal Link / UIApplication / URL scheme) (1) | 2022.03.13 |
[ iOS ] layout subviews관련 메서드 - viewWillLayoutSubviews, layoutSubviews, viewDidLayoutSubviews (0) | 2021.09.27 |
[ iOS ] 내비게이션 컨트롤러 (2) - 기능 (0) | 2021.08.30 |
[ iOS ] 내비게이션 컨트롤러 (1) - 레이아웃 (0) | 2021.08.29 |