这是&#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天内一直坚持这一点?
答案 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)
}