UINavigation 控制器:以编程方式呈现和关闭
Posted
技术标签:
【中文标题】UINavigation 控制器:以编程方式呈现和关闭【英文标题】:UINavigation controller: present and dismiss programmatically 【发布时间】: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)
当我按下后退按钮时,没有任何变化,但导航栏变为空白(没有标题)。我感觉应用程序只是“忘记”了在新导航控制器出现之前使用的导航控制器。
我该如何解决这个问题?
【问题讨论】:
【参考方案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 上放置和调用 dismiss
function 来解决问题:
...
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)
【讨论】:
以上是关于UINavigation 控制器:以编程方式呈现和关闭的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式呈现新的 ViewController [Swift 3]