UInavigationControlの場合


UInavigationControlの場合


UI ViewControllerとの関係と基本情報を整理します.
不足や間違いの内容は指摘してください!

まずはアップル公式ドキュメント


UINavigationController
他のDocumentsより长い说明だけど意訳すると...
A container view controller that defines a stack-based scheme for navigating hierarchical content.
UINAvigationControlは、階層コンテンツをナビゲートするためのStackベースのContainer Viewコントローラです.
A navigation controller is a container view controller that manages one or more child view controllers in a navigation interface.
ナビゲーションコントローラは、前述した1つ以上のchildvcを管理するcontainer viewコントローラである.
In this type of interface, only one child view controller is visible at a time.
ナビゲーションコントローラはスタックベースのインタフェースなので、最上位のVCしか見えません.
->PushまたはPopによるビジュアル管理
初期のroot view controllerに加えて、Navigation Barの上部に後退ボタンが表示され、topview controllerをクリアできます.

iOS Settings Appの初期画面では、root view controller以外の他のVCでは、ナビゲーションコントローラが提供するBack Buttonが表示されます.

UInavigationControllerの要素を見てみましょう。



viewController


前述のNavigation Stackを使用して管理します.

navigationBar


ユーザはまた、UINAvigationBarDelegateを使用して特定の動作を処理し、タイトル、後退ボタン、または設定によってデータを交換することもできます.
ナビゲーションコントローラは常に表示されます.

toolbar


インタフェースの下部にあるオプションツールバー

delegate


UINavigationControllerDelegateプロトコルを遵守します.
委任オブジェクトは、特定のビューコントローラのプッシュ/ポップアップ(表示)または移動アニメーションを処理します.

だからどうやって使うの?


私はSnapkitで開発するのが好きです...main storyboardがない使用状況を記録します

UINavigationControllerの発表と使用


SceneDelegate.swift
rootViewコントローラを指定します.
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        //UINavigationController를 Base로 갖는 Scene 생성
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.backgroundColor = .systemBackground
        window?.rootViewController = UINavigationController(rootViewController: ViewController())
        window?.makeKeyAndVisible()
    }
ViewController.swift-navigationBar設定
override func viewDidLoad() {
		super.viewDidLoad()
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.title = "NavigationBar 타이틀 입력"
 }
UInavigationControllerのrootview Controllerを使用する場合
UItableView()を使用して、特定のセルを選択したときに画面をプッシュするには、次の手順に従います.
extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let vc = ViewController()
        navigationController?.pushViewController(vc, animated: true)
    }
}
tableViewはlazyとして宣言され、初期化されます.
viewDidLoadで確認します.addSubView(Table View)でいいです
    //create tableview
    private lazy var tableView: UITableView = {
        let tableView = UITableView()
        tableView.dataSource = self
        tableView.delegate = self
        
        return tableView
    }()
    //set layout and initialized into viewDidLoad method
    private func setTableViewLayout() {
        view.addSubview(tableView)
        tableView.snp.makeConstraints {
            $0.edges.equalToSuperview()
        }
    }
Table ViewのUIに配布するDataSourceプロトコルのセルを忘れないでください.
extension StationSearchViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10 
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //이번에는 tableviewcell을 custom 하지 않으므로 바로 초기화해서 사용
        let cell = UITableViewCell()
        cell.textLabel?.text = "\(indexPath.item)"
        
        return cell
    }
}

n/a.結論


選択したTable Viewの選択したセルをクリックします.
UI ViewControlとは異なり、
UInavigationControlで管理されているビューコントローラを追加し、Stackの最上位レベルに追加します.
以上!