2011-10-21 21 views
0

私はMKMapViewをいくつかの注釈を付けた私のビューの1つに持っています。また、各セルに各アノテーションの詳細を提示する隠れたUITableViewもあります。ユーザーが特定のアノテーションを選択すると、tableViewが表示され、特定のセルが選択されます。また、ユーザがセルを選択すると、特定の注釈が選択される。MKMapView didDelectlectAnnotationViewとUITableViewとのやりとり

注釈が選択され、ユーザーがマップをタップするとtableViewが消えますが、ユーザーが別の注釈を選択するとtableViewが表示され、選択されたインデックスが変更されます。

問題は、didDeselectAnnotationViewメソッドにあります。そこに現時点では何も選択した注釈がないとのtableViewは常に隠されます

- (void)mapView:(MKMapView *)mapview didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    if([mapView.selectedAnnotations count] == 0) 
     [self hideTableView]; 
} 

:メソッドでチェックしたいので、ときにdidSelectAnnotationView前に呼び出されます。

私の質問は、didDeselectAnnotationViewがタップされた地図と別の注釈の選択を区別する方法があるかどうかです。

また、iPhone 3G(4.2.1)didDeselectAnnotationViewでAFTER didSelectAnnotationViewが呼び出される理由は何ですか?それはかなり変わったようです!

ありがとうございます!

答えて

1

次のように私はこれに近づくような方法がある.... didSelect方法は、それがこの要求し、コードをキャンセル発射する場合、これは、それは、0.1秒間hideMyTableViewの呼び出しを待ち行列に入れない何

- (void)mapView:(MKMapView *)mapview didDeselectAnnotationView:(MKAnnotationView *)view { 
    [self performSelector:@selector(hideMyTableView) withObject:nil afterDelay:0.1]; 
} 

- (void)mapView:(MKMapView *)mapview didDeselectAnnotationView:(MKAnnotationView *)view { 
    [NSObject cancelPreviousPerformRequestsWithTarget:self]; 
} 

didSelectが呼び出されない場合は、hideMyTableViewが呼び出されます。 0.1〜0.5を増やす必要がありますが、最初に0.1を試してください。

+0

サイモンさん、ありがとう、私が必要としているようです。 2番目の質問に関するアイデア(iPhone3Gについて)ありがとうございました! – ozzotto

+0

呼び出しがスレッド化されているため、電話でのパフォーマンス、または特定のOSでの異なるコード最適化が難しいかもしれませんが、スレッドのボトルネックが変わる可能性があることを決して知らないので、通知の順序 –

関連する問題