NavigationController란
NavigationController란
상세페이지로 이동
- sceneDelegate 수정
뷰컨트롤러를 네비게이션컨트롤러로 감싸서 상세페이지로 이동이 가능하도록 설정
- 앱의 라이프사이클을 관리하는 객체인
UIScene을 ios 13 이후로는 여러개의 윈도우를 가질 수 있게 되면서UIWindowScene타입으로 캐스팅1
guard let windowScene = (scene as? UIWindowScene) else { return } - 앱의 콘텐츠를 담을 가장 바깥쪽 컨테이너인 윈도우를 생성
1
let window = UIWindow(windowScene: windowScene)
- 실제 뷰 컨트롤러 인스턴스 생성
1
let mainVC = ViewController()
- 네비게이션컨트롤러의 rootViewController 할당
1
let navigationController = UINavigationController(rootViewController: mainVC)
- 네비게이션컨트롤러를
window의 rootViewController로 할당1
window.rootViewController = navigationController
- 새로 생성한 윈도우를 메모리에 유지하기 위해 앱의 속성
window에 할당1
self.window = window
- 윈도우를 앱의 주요 윈도우로 만들고 화면에 표시
1
window.makeKeyAndVisible()
- 전체 코드
1 2 3 4 5 6 7 8 9
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } let window = UIWindow(windowScene: windowScene) let mainVC = ViewController() let navigationController = UINavigationController(rootViewController: mainVC) window.rootViewController = navigationController self.window = window window.makeKeyAndVisible() }
- 상세페이지 구현
1 2 3
class DetailViewController: UIViewConroller { ... }
3-1. 버튼으로 상세페이지 화면 전환
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
32
33
// ViewController.swift
class ViewController: UIViewController {
// 버튼 생성 및 설정
let myButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("상세 페이지로 이동", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(myButton)
// 버튼의 레이아웃 설정
myButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
// 버튼의 탭 이벤트에 대한 액션 추가
myButton.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
}
// 버튼이 탭되면 호출되는 메서드
@objc func didTapButton() {
// 다음 화면(상세 페이지)을 생성
let detailVC = DetailViewController()
// 화면 전환
navigationController?.pushViewController(detailVC, animated: true)
}
}
3-2. UITabGestureRecognizer사용하기
- 버튼이 아닌 일반적인 UIView나 UIImageView 등을 탭했을 때 동작하게 하려면 제스처 인식기를 사용합니다.
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
32
33
34
35
// ViewController.swift
class ViewController: UIViewController {
// 탭 가능한 뷰 생성
let tappableImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(systemName: "star.fill"))
imageView.translatesAutoresizingMaskIntoConstraints = false
// 사용자 상호작용을 허용
imageView.isUserInteractionEnabled = true
return imageView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(tappableImageView)
// 이미지 뷰의 레이아웃 설정
tappableImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
tappableImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
// 탭 제스처 인식기 생성
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapItem))
// 이미지 뷰에 제스처 인식기 추가
tappableImageView.addGestureRecognizer(tapGesture)
}
// 탭 이벤트 발생 시 호출되는 메서드
@objc func didTapItem() {
// 상세 페이지로 이동하는 로직
let detailVC = DetailViewController()
navigationController?.pushViewController(detailVC, animated: true)
}
}
This post is licensed under CC BY 4.0 by the author.