我有一个在iPad上运行的主/细节应用程序。在横向模式下,我将两个视图并排放在一起。 权限/详细信息视图控制器包含MKMapView
。重复使用故事板中涉及的细节UIViewController
问题是,当在视图控制器中选择一个不同的表格单元格并且基本上重新执行该segue时,整个详细视图控制器被重新实例化。
这意味着我使用的MKMapView
会丢失用户的位置,并且基本上从头开始,从国家规模放大到街道规模。
在执行segue之前,有没有一种方法可以确定显示的细节视图是否已经是我想要的细节视图,并且只是提供新数据并告诉它刷新?
例如:
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
的时候,我可以接受所提供重用的视图控制器,特别是(!)是否已经显示。在
didSelectRowAtIndexPath
方法,执行一个自定义的继续,并做我自己的推动。但我真的很喜欢使用内置系统的想法,所以我不必具体说明我在推什么,在哪里。使用Show Detail (eg. Replace)
比定义我自己的设备更加不可知。