我有一個在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)
比定義我自己的設備更加不可知。