我有一个在 iPad 上运行的主/从应用程序。在横向模式下,我将两个 View 并排放置。 right/detail View Controller 包含一个 MKMapView
。
问题是,当在left/master View Controller 中选择不同的表格单元格,并且基本上重新执行 segue 时,整个详细 View Controller 将被重新实例化。
这意味着我使用的 MKMapView
失去了用户的位置,基本上从头开始,从国家比例放大到街道比例。
有没有办法在执行 segue 之前确定正在显示的详细 View 是否已经是我想要的,并简单地向它提供新数据并告诉它刷新?
例如:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
segueParkName = parkNames[indexPath.row]
self.performSegueWithIdentifier("showParkDetails", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showParkDetails" {
let controller = (segue.destinationViewController as UINavigationController).topViewController as ParkDetailsController
NSLog("Controller: \(controller)") // Different instance every time!
controller.parkName = segueParkName
}
}
我想要:
以某种方式告诉 iOS 在到达
prepareForSegue
时,我可以接受提供一个重用 View Controller ,尤其是 (!) 如果它已经显示。在
didSelectRowAtIndexPath
方法中,执行自定义 segue 并进行我自己的推送。但我真的很喜欢使用内置系统 segues 的想法,所以我不必具体说明我要推送什么以及推送到哪里。使用Show Detail (eg. Replace)
似乎比定义我自己的更独立于设备。
最佳答案
我认为,在您的第一个建议中,一旦您进入 prepareForSegue,即使不是不可能放弃 segue 也会很麻烦。所以我会选择你的第二个选择。但是如果你想要的细节 viewController 已经到位,你根本不需要触发一个 segue。所以而不是
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
segueParkName = parkNames[indexPath.row]
self.performSegueWithIdentifier("showParkDetails", sender: self)
}
你可能有类似...
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
segueParkName = parkNames[indexPath.row]
self.detailViewController.parkName = segueParkName
}
这假设您已经有一个属性 detailViewController 指向您的细节 ViewController。它还假定 detailViewController 将始终是您需要的那个 - 如有必要,请检查 detailViewController 类以查看它是否是您想要的 MKMapView。最后,如果设置 parkName 没有实现您需要的一切(例如动画更改),那么只需在 MkMapView 中实现一个新方法并调用它来代替设置 parkName。
编辑 只是为了对此进行扩展,您可以使用:
if self.detailViewController.isKindOfClass(yourMKMapViewSubclass) {
self.detailViewController.parkName = segueParkName
}
测试 detailViewController 是否确实是你的 MkMapView。
关于ios - 重用 Storyboard segue 中涉及的细节 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108309/