ios - 如何在 swift 中通过代码添加导航栏并显示另一个 Controller

标签 ios swift

现在我有两个Controller,一个是FirstViewController,一个是SecondViewController。

在 FirstViewController 中

var secondViewController: SecondViewController!

let textView: UITextView = {
    let textView = UITextView()
    //textView.font = UIFont.systemFont(ofSize: 20)
    textView.isEditable = true
    textView.keyboardDismissMode = .interactive
    textView.allowsEditingTextAttributes = true
    return textView
}()

override func viewDidLoad() {
    super.viewDidLoad()

    secondViewController = SecondViewController()
    secondViewController.firstViewController = self
    setUpLayout()
    addKeyboardObserver()


    // Do any additional setup after loading the view, typically from a nib.
}

然后我添加一个按钮以将 secondaryViewController 的 View 显示为自定义键盘

@objc func showSecondView() {
    textView.resignFirstResponder()
    textView.inputView = secondViewController.view
    textView.becomeFirstResponder()
}

然后在SecondViewController中,如图所示,现在我想在SecondViewController中添加一个导航栏,怎么做?(我可以使用 Storyboard来做到这一点,但我不能使用代码来做到这一点)。 我想在选择 SecondViewController 中的 tableView(红色区域)时显示 ThirdViewController,并且 ThirdViewController 的 View 将显示在红色区域,而不是整个屏幕,(就像 Storyboard 的“显示”连接一样)我该怎么做?

enter image description here

最佳答案

您必须从 Root View Controller 获取导航 Controller ,以便您可以随时隐藏和显示,您可以做的另一件事是,为特定 View Controller 获取导航 View Controller 。但是您无法导航(推送)任何导航 View Controller 。你只能呈现它。检查下面我的代码

import UIKit

class ViewControllerWithoutNavigation: UIViewController { // This is without navigation

    override func viewDidLoad() {
        super.viewDidLoad()


    }


    func gotoNextViewController(){
        let nvc = UINavigationController(rootViewController: ViewControllerWithNavigation())

        let transition = CATransition()
        transition.duration = 0.25
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromRight
        self.view.window!.layer.add(transition, forKey: kCATransition)
        //transition is to show like pushing, Without it it will look like presenting from bottom

        self.present(nvc, animated: false, completion: nil)

    }

}


class ViewControllerWithNavigation: UIViewController { // This is with navigation

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .white
    }


}

关于ios - 如何在 swift 中通过代码添加导航栏并显示另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51892728/

相关文章:

swift - Fight with "Function signature ' ' 与 Swift 1.2 中的预期类型 '' 不兼容

ios - 如何摆脱按下后退按钮后立即发生的故障?

iPhone iOS 如何使 UIRotationGestureRecognizer 和 UIPinchGestureRecognizer 协同工作以缩放和旋转带有 subview 的 UIView?

ios - 在 uiscrollview 中滑动不能正常工作

ios - 如何正确地子类化从 Swift 中的 xib 加载的 View 类?

ios - UITableView 使用 UIViewController 不加载 tableView

ios - 快速获取 UIButton 按下的位置

ios - 如何在 Objective C 中编写以下代码?

ios - 快速显示数学

ios - swift 3 : Tableview datasource methods "Overriding non-open instance method outside of its defining module" error