【问题标题】:UINavigation controller: present and dismiss programmaticallyUINavigation 控制器:以编程方式呈现和关闭
【发布时间】:2017-11-13 19:22:36
【问题描述】:

我有一个 TableViewController,我想以模态方式呈现它,我需要它有一个 NavigationBar。

为了获得该导航栏,我有一个嵌入式 UINavigationController,据我所知,UINavigationController 是我必须以模态方式呈现的,所以这就是我所做的。

一切正常,但我无法正确关闭该控制器。这是我到目前为止所得到的:

func presentErrorMessages(errorMessages: [String]) {
    let storyBoard: UIStoryboard = UIStoryboard(name: "Message", bundle: nil)

    let infoMessagesNavigationViewController = storyBoard.instantiateViewController(withIdentifier: "InfoMessagesNavigation") as! ModalNavigationController

    let infoMessagesTableViewController = infoMessagesNavigationViewController.viewControllers[0] as! InfoMessagesTableViewController
    infoMessagesTableViewController.errorMessages = errorMessages

    self.navigationController?.present(infoMessagesNavigationViewController, animated: true)
}

我用它来展示 ModalNavigationController,然后用它来关闭它:

class ModalNavigationController: BaseNavigationController {

    var backNavItem = UINavigationItem()
    var okNavItem = UINavigationItem()

    override func viewDidLoad() {
        super.viewDidLoad()

        let backButton = UIBarButtonItem(title: "Back", style: .plain, target: self, action:  #selector(dismissModal))
        backNavItem.leftBarButtonItem = backButton

        ...

        var items = [UINavigationItem]()
        items.append(backNavItem)

        self.navigationBar.items = items
    }

    @objc func dismissModal() {
        self.dismiss(animated: true)
    }
}

当我按下后退按钮时,没有任何变化,但导航栏变为空白(没有标题)。我感觉应用程序只是“忘记”了在新导航控制器出现之前使用的导航控制器。

我该如何解决这个问题?

【问题讨论】:

    标签: swift uinavigationcontroller presentviewcontroller


    【解决方案1】:

    试试这样的:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .done, target: self, action:  #selector(dismissModal))
        ...
    }
    
    @objc func dismissModal() {
        self.dismiss(animated: true, completion: nil)
    }
    

    【讨论】:

      【解决方案2】:

      我设法通过在 TableViewController 而不是 NavigationController 上放置和调用 dismissfunction 来解决问题:

      ...
      public func setBackButton(){
          if self.navigationController != nil {
              let item = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(dismissModal))
              self.navigationItem.leftBarButtonItem = item
          }
      }
      
      @objc func dismissModal() {
          self.dismiss(animated: true)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 2014-01-20
        • 1970-01-01
        相关资源
        最近更新 更多