在 Swift 中缺少带有导航控制器的视图控制器中的后退按钮

Posted

技术标签:

【中文标题】在 Swift 中缺少带有导航控制器的视图控制器中的后退按钮【英文标题】:Missing a back button in View Controller with a navigation controller in Swift 【发布时间】:2015-07-30 23:09:22 【问题描述】:

通过我在这个论坛上的研究,我开始了解导航控制器的工作原理。让我们将导航控制器设置为 firstView(表视图)作为根视图控制器。 firstView 中有一个按钮将我带到 secondView(视图控制器)。当然,如果我通过 Push segue 将 firstView 连接到 secondView,那么 secondView 中应该有一个后退按钮。但是在我的 secondView 中没有显示任何内容。

这是我在 firstView 中的代码:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    let sb = UIStoryboard(name: "Main", bundle: nil)
    let messagesVC = sb.instantiateViewControllerWithIdentifier("MessagesViewController") as! MessagesViewController        

    //Just querying, not important to my question
    roomQuery.findObjectsInBackgroundWithBlock  (results: [AnyObject]?, error: NSError?) -> Void in
        if error == nil 
            //Push the message onto the navigation controller

            //This will have a back button but the functionality of secondView breaks (for some weird reason?????)
            self.navigationController?.pushViewController(messagesVC, animated: true)

            //This will have no back button, but has functionalities that I had intended it to have 
            self.navigationController?.presentViewController(messagesVC, animated: true, completion: nil)
    

那么这不应该在 firstView 和 secondView 之间创建一个连接,在 secondView 中有一个后退按钮吗?我目前正在使用 presentViewController(),所以我只需要一个该死的后退按钮。

我也尝试在 secondView 中创建一个导航栏和一个栏按钮项,但它也没有显示出来。有人帮我解决这个问题真是太好了。

【问题讨论】:

你在 IB 做这些吗? (界面生成器) 【参考方案1】:

您在后台线程而不是主线程中进行 UI 工作。在这个网站和其他地方有太多的讨论,无法计算。寻找模式:

dispatch_async(dispatch_get_main_queue()) 
    // update some UI

特别是

roomQuery.findObjectsInBackgroundWithBlock 
    [unowned self] 
    (results: [AnyObject]?, error: NSError?) -> Void in
    if error == nil 
        // Push the message onto the navigation controller
        dispatch_async(dispatch_get_main_queue()) 
          self.navigationController?.pushViewController(messagesVC, animated: true)
        
    

如果您想获得真正的见解,请从 http://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1 之类的教程开始

【讨论】:

您能否对此提供更多见解?感谢您尝试提供帮助,但这并不是最友好的回应。 已修改。不一定是唯一的错误,但一定要先修复它

以上是关于在 Swift 中缺少带有导航控制器的视图控制器中的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

从搜索控制器导航后缺少导航栏

Swift - 嵌套导航控制器缺少“编辑”按钮

swift3中的导航问题,带有没有故事板的.xib文件

Swift iOS - 如何打印导航堆栈中尚未推送的所有子视图控制器的列表

如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?

从标签栏控制器跳回导航控制器 - swift 4