iOS swift 스토리보드 화면전환:
1. 이동하려는 스토리보드 파일 찾기
2. 이동하려는 스토리보드 내에 뷰 컨트롤러 찾기
3. 화면전환
*주의사항
push-pop (show) 의 경우 navigation controller 필수임 (스토리보드에서 조치해줘야 함) (우측에서 등장)
present-dismiss (modal) 의 경우 아래에서 위로 전환. (코드로 구현 가능. 스토리보드에서 딱히 뭐 안해도 됨)
Trend 버튼 3개있는 VC에서 (Trend TableViewController) (영화, 드라마, 도서 버튼) -> 영화 버튼 클릭시 BucketlistTableViewController 띄워줌
1번 버튼. present 방식
@IBAction func movieButtonClicked(_ sender: UIButton) {
//화면전환: 1. 스토리보드 파일 찾기 2. 스토리보드 내에 뷰 컨트롤러 3. 화면전환
//영화버튼 클릭 -> BuckerlistTableViewController Present(아래에서 위로 띄워줌)
//1. 스토리보드 파일찾기
let presentStoryboard = UIStoryboard(name: "Trend", bundle: nil) //nil:기본 위치로 가져옴
//2. 스토리보드 내에 있는 뷰 컨트롤러 가져오기
let vc = presentStoryboard.instantiateViewController(withIdentifier: BucketlistTableViewController.identifier) as! BucketlistTableViewController
//3. 화면 전환
//여기서 self는 TrendTableViewController를 의미함
self.present(vc, animated: true)
}
2번 버튼. present 방식 (fullScreen으로 덮는거 추가)
@IBAction func dramabuttonClicked(_ sender: UIButton) {
//1. 스토리보드 파일찾기
let presentStoryboard = UIStoryboard(name: "Trend", bundle: nil) //nil:기본 위치로 가져옴
//2. 스토리보드 내에 있는 뷰 컨트롤러 가져오기
let vc = presentStoryboard.instantiateViewController(withIdentifier: BucketlistTableViewController.identifier) as! BucketlistTableViewController
//2.5. present할 때의 화면 전환 방식 설정 (옵션) 기억해두면 좋음!
vc.modalPresentationStyle = .fullScreen
//3. 화면 전환
//여기서 self는 TrendTableViewController를 의미함
self.present(vc, animated: true)
}
3번 버튼. present 방식인데 Navigation controller 코드로 embed한거
<Navigation controller를 코드로 embed하여 BucketlistTableViewController 로 present 방식으로 화면 전환 (아래에서 위로)> (navigation view controller 코드로 짜고 + present 방식) ==> 이동되는 화면에선 dismiss로 사라지게. (present - dismiss)
@IBAction func bookButtonClicked(_ sender: UIButton) {
//1. 스토리보드 파일찾기
let presentStoryboard = UIStoryboard(name: "Trend", bundle: nil) //nil:기본 위치로 가져옴
//2. 스토리보드 내에 있는 뷰 컨트롤러 가져오기
let vc = presentStoryboard.instantiateViewController(withIdentifier: BucketlistTableViewController.identifier) as! BucketlistTableViewController
//2.5 Navigation controller embed
let nav = UINavigationController(rootViewController: vc)
//2.5. present할 때의 화면 전환 방식 설정 (옵션) 기억해두면 좋음!
nav.modalPresentationStyle = .fullScreen //nav로 띄우는지 vc로 띄우는지에 따라 이거 적용된거 안된거 확인 가능
//3. 화면 전환
//여기서 self는 TrendTableViewController를 의미함
self.present(nav, animated: true)
}
==> 위의 @IBAction func bookButtonClicked(_ sender: UIButton 케이스를 실행시키려면 BucketlistTableViewController 파일에 Navigation controller를 embed하는 코드를 아래와 같이 짜야함.
navigationItem.title = "버킷리스트"
navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "xmark"), style: .plain, target: self, action: #selector(closeButtonClicked))
참고 4번. push 방식. Navigation Controller 스토리보드에서 조치한거-(스토리보드에서 안해도 됨 . 수업시간에 잠깐 했던거임. )
셀을 클릭했을 때 A스토리보드의 특정 VC에서 B 스토리보드의 어떤 VC로 화면 전환.
[Navigation View Controller (스토리보드에서 조치-생략 가능)+ push 로 구현]
예를 들어 C화면에서 D화면으로 이동하려는 경우:
C화면의 스토리보드 UI적으로 navigation controller를 embed시켜줘야 함. 이동하고자 하는 D화면이 아님!!
Search 스토리보드의 MovieInfoTableViewController => Trend 스토리보드의 Recommend CollectionViewController로 이동할 때 :
-> 위 1,2,3과 같은 원리임.
->But, 위에서 3번째 케이스와 똑같이 Navigation embed 했으나, 현재 케이스의 경우는 스토리보드 상에서 UI적으로 navigation view controller를 embed 했음(코드로 구현하지 않고)
따라서 아래와 같이 코드가 작성됨.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("didSelectRowAt") // 동작하지 않는다면? 1.TableView가 noSelection 2. 셀 위에 전체 버튼
let sb = UIStoryboard(name: "Trend", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "RecommendCollectionViewController")
self.navigationController?.pushViewController(vc, animated: true)
}
==>위에처럼 코드 쓰더라도 storyboard상에서 navigation controller를 embed 하지 않아도 되긴 한다...!!!
-----------------------------------------------위에까지는 전부 다 첫번째에서 두번째 화면으로 이동하려는 거 설명함--------
-----아래부터는 이동된 화면에서 뒤로가기 또는 사라지게 하기------------------------------------------------------------
present-dismiss
push-pop
***dismiss 구현 (네비게이션 바 버튼 아이템 xmark클릭시 dismiss 구현)
override func viewDidLoad() {
super.viewDidLoad()
//네비게이션 왼쪽 바버튼아이템 생성
navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "xmark"), style: .plain, target: self, action: #selector(xmarkClicked))
}
@objc func xmarkClicked() {
self.dismiss(animated: true)
}
스토리보드 없이 코드로 짤 때 화면 전환 방법
https://hururuek-chapchap.tistory.com/163
IOS) StoryBoard없이 Custom Navigation Controller
안녕하세요 후르륵짭짭입니다. 이제 StoryBoard를 사용하지 않고 가능하면 Code를 사용해서 UIKit을 구성하려고 합니다. 그럼 바로 가시죠!! ** Main StoryBoard를 삭제했다면 ** 만약에 StoryBoard를 삭제하고
hururuek-chapchap.tistory.com
'iOS > iOS SeSAC 2기 TIL' 카테고리의 다른 글
UIView에서 tableview 삽입 vs. TableViewController (0) | 2022.07.27 |
---|---|
값 전달 (0) | 2022.07.24 |
옵셔널 바인딩, 인스턴스/타입 프로퍼티 (0) | 2022.07.21 |
Navigation Bar button item 코드로 짜는 방법 (0) | 2022.07.21 |
Kingfisher, Toast-Swift (0) | 2022.07.20 |