我将用户发送到一个页面上的按钮点击。这个页面是一个UITableViewController。
现在如果用户点击一个单元格,我想把他推回到上一页。
我想到了self.performSegue("back")....但这似乎不是一个好主意。
正确的做法是什么?
我将用户发送到一个页面上的按钮点击。这个页面是一个UITableViewController。
现在如果用户点击一个单元格,我想把他推回到上一页。
我想到了self.performSegue("back")....但这似乎不是一个好主意。
正确的做法是什么?
当前回答
在这种情况下,你从UIViewController中呈现一个UIViewController,也就是。
// Main View Controller
self.present(otherViewController, animated: true)
简单地调用dismiss函数:
// Other View Controller
self.dismiss(animated: true)
其他回答
如果Segue是“Show”或“Push”类型,那么你可以在UINavigationController的实例上调用“popViewController(animated: Bool)”。或者如果segue是present,那么调用UIViewController的实例"dismiss(animated: Bool, completion: (() -> Void)?
关于如何在故事板中嵌入viewController到navigationController的问题:
打开不同viewController所在的故事板 点击你想要导航控制器开始的viewController 在Xcode顶部,点击“编辑器” ->轻按“嵌入” ->轻按“导航控制器”
我是这样做的
func showAlert() {
let alert = UIAlertController(title: "Thanks!", message: "We'll get back to you as soon as posible.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
self.dismissView()
}))
self.present(alert, animated: true)
}
func dismissView() {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
}
斯威夫特3
我可能回答得晚了,但对于swift 3,你可以这样做:
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "< Back", style: .plain, target: self, action: #selector(backAction))
// Do any additional setup if required.
}
func backAction(){
//print("Back Button Clicked")
dismiss(animated: true, completion: nil)
}
我想建议解决这个问题的另一种方法。与其使用导航控制器弹出视图控制器,不如使用unwind segue。这个解决方案有一些非常重要的优点:
原点控制器可以回到任何其他目标控制器(不仅仅是前一个),而不需要知道任何关于目标的信息。 Push和pop segue是在storyboard中定义的,所以在你的视图控制器中没有导航代码。
你可以在Unwind segue一步一步中找到更多细节。如何在前一个链接中有更好的解释,包括如何发回数据,但在这里我将做一个简单的解释。
1)转到目标视图控制器(不是源视图控制器)并添加一个unwind segue:
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2)从视图控制器本身按CTRL拖动到原点视图控制器的退出图标:
3)选择刚才创建的unwind函数:
4)选择unwind segue并给它一个名字:
5)到原点视图控制器的任意位置,调用unwind segue:
performSegue(withIdentifier: "unwindToContact", sender: self)
我发现当你的导航开始变得复杂时,这种方法会带来很多好处。
我希望这能帮助到一些人。