Ios 如何在swift中添加导航栏并通过代码显示另一个控制器

Ios 如何在swift中添加导航栏并通过代码显示另一个控制器,ios,swift,Ios,Swift,现在我有两个控制器,一个是FirstViewController,一个是SecondViewController 在FirstViewController中 var secondViewController: SecondViewController! let textView: UITextView = { let textView = UITextView() //textView.font = UIFont.systemFont(ofSize: 20) textV

现在我有两个控制器,一个是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.
}
然后我添加了一个按钮,将secondViewController的视图显示为自定义键盘

@objc func showSecondView() {
    textView.resignFirstResponder()
    textView.inputView = secondViewController.view
    textView.becomeFirstResponder()
}
然后在SecondViewController中,如图所示,现在我想在SecondViewController中添加一个导航栏,如何?(我可以使用故事板,但不能使用代码)。 我想在选中SecondViewController中的tableView(红色区域)时显示ThirdViewController,并且ThirdViewController的视图将显示在红色区域,而不是整个屏幕上(就像故事板的“show”连接一样),我该怎么做


您必须从根视图控制器获取导航控制器,以便可以随时隐藏和显示,另一件事是,为特定视图控制器获取导航视图控制器。但您不能导航(推送)任何导航视图控制器。你只能展示它。检查下面的代码

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
    }


}

添加导航控制器

在故事板中选择viewcontroller,然后转到编辑器->嵌入->导航控制器

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.
}
显示另一个视图控制器

*将情节提要id添加到导航控制器

*然后在操作中添加此代码

let storyBoard  = UIStoryboard(name: "storyboard_name", bundle: nil)
let destination = storyBoard.instantiateViewController(withIdentifier: "storyboard_id")
self.navigationController?.pushViewController(destination, animated: true)