在Swift中我的视图控制器上无法获得后退按钮

时间:2015-07-30 19:08:35

标签: ios swift uinavigationcontroller

这是&#39>正在进行的事情:

我有一个导航控制器,A-TableViewController设置为根视图控制器。一旦我点击A中的一个单元格,它就会把我带到B-ViewController。导航控制器具有标识符" MessagesViewController"。这是迄今为止我在A-TableViewController中的代码:

func tableView (tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let sb = UIStoryboard(name: "Main", bundle: nil)
    let messagesVC = sb.instantiateViewControllerWithIdentifier("MessagesViewController") as! MessagesViewController
    //Some code here
    //This has a back button, but nothing else
    self.navigationController?.pushViewController(messagesVC, animated: true)
    //This has no back button, but everything else that I intended works
    self.navigationController?.presentViewController(messagesVC, animated: true, completion: nil)

我希望能够回到A-TableViewController,一切正常。这是我推动/呈现视图控制器的方式吗?任何人都有任何线索,为什么我在过去3天内一直坚持这一点?

4 个答案:

答案 0 :(得分:1)

将视图推送到导航视图时,内置后退按钮。 presentViewController以模态方式显示您的视图。我过去所做的就是在视图中添加我自己的后退按钮并呈现它。然后按下它时,调用dismissViewController。

答案 1 :(得分:0)

您可以使用prepareForSegue方法传递数据,如下所示:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if segue.identifier == "messageSegue" {
        let vc:  B-ViewController = segue.destinationViewController as!  B-ViewController
        //then set properties of your new viewController like this
        vc.property = dataToPass
    }
}

答案 2 :(得分:0)

如果您确实使用导航控制器,那么问题应该非常简单。 创建一个@IBAction,并在其中调用popToRootViewControllerAnimated,如下所示:

 @IBAction func rootButton(sender: UIButton) {
    navigationController?.popToRootViewControllerAnimated(true) // or false :)

}

答案 3 :(得分:0)

展示B-ViewController之后,请在viewDidLoad中尝试以下操作:

let btnBack = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(dismissVC))
    btnBack.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .normal)
    navigationItem.setLeftBarButton(btnBack, animated: true)

@objc func dismissVC() {
    self.dismiss(animated: true, completion: nil)
}