これを読むと、マップビューとテーブルビューが同じビューコントローラに属しているように聞こえます。もしそうなら、ビューコントローラは物事を一元化したい場所です。ここでも、モデルがデータオブジェクトの配列であると想定して、さまざまなビューを調整するすべての作業を実行するメソッドをコントローラーに用意します。
- (void)selectModelAtIndex:(NSUInteger)index sender:(id)sender
{
if (self.isSelectingModel)
return;
self.isSelectingModel = YES; // Stops recursive calls to -selectModelAtIndex:
NSIndexPath *indexPath = [self indexPathForModelAtIndex:index];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone;
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNon animate:NO];
MKAnnotation *annotation = [self annotationForModelAtIndex:index];
[self.mapView selectAnnotation:av.annotation animated:NO];
[self performSegueWithIdentifier:@"Identifier Of Detail View" sender:sender];
self.isSelectingModel = NO;
}
これは、詳細ビューコントローラにセグエする前にtableViewとmapViewの同期を維持する単一のメソッドです。isSelectingModel
プロパティ-indexPathForModelAtIndex:
、、、が必要です-annotationForModelAtIndex:
。
このメソッドはテーブルビューによって呼び出され、マップビューはコールバックを選択しました。