UInavigationControlの場合
11976 ワード
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の最上位レベルに追加します.
以上!
Reference
この問題について(UInavigationControlの場合), 我々は、より多くの情報をここで見つけました
https://velog.io/@iseeu95/UINavigationController-에-대해
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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()
}
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "NavigationBar 타이틀 입력"
}
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = ViewController()
navigationController?.pushViewController(vc, animated: true)
}
}
//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()
}
}
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
}
}
Reference
この問題について(UInavigationControlの場合), 我々は、より多くの情報をここで見つけました https://velog.io/@iseeu95/UINavigationController-에-대해テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol