1

cs193p の割り当て 5 の最後の部分を完了しようとしています (リンク)

このアプリは、Flickr から人気のある場所を選択し、それらの場所の写真を地図上にプロットします。

それは言うタスク5cです

マップ上の各注釈には、次の内容を表示する吹き出しが必要です。選択した写真の完全な画像を表示する開示ボタン (ユーザーがテーブルから写真を選択した場合とまったく同じ)、またはその場所の写真のリストを表示する開示ボタン (ユーザーがその場所を選択した場合とまったく同じ)テーブルから)。

吹き出しを表示し、吹き出しにサムネイルを読み込む前の部分は既に完了しています。

私はすでに mapViewController を mapView のデリゲートとして設定しており、ピンをクリックすると didSelectAnnotationView メソッドが呼び出されるため、機能していることがわかります。コールアウトの開示アクセサリ。

ただし、メソッド calloutAccessoryControlTapped (同じ VC) も定義しましたが、このメソッドは呼び出されません。まったく。現時点では、そこに NSLog があるだけで、何も表示されません。

何も言いませんが、もっと奇妙にするために、機能しない数百の注釈のうち、機能する注釈が 1 つあります。

最初の 1 つの注釈がボタンを起動しますが、それ以外は何もしません。それは最初の注釈だからですか?ボタンはそのためだけに発射されますか?

コードを投稿したかったのですが、それがどれほど関連しているかはよくわかりません:

 @interface flickrthingMapViewController ()<MKMapViewDelegate>
    @property (weak, nonatomic) IBOutlet MKMapView *mapview;

    @end

    @implementation flickrthingMapViewController
    @synthesize delegate = _delegate;

    @synthesize mapview = _mapview;
    @synthesize annotations = _annotations;


    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.mapview.delegate = self; //remembered to set the delegate

    }
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView
{
    if (![aView.annotation isKindOfClass:[flickrthingPlaceAnnotation class]])
    {
        UIImage *image = [self.delegate flickrthingMapViewContoller:self imageForAnnotation:aView.annotation];


        [(UIImageView *)aView.leftCalloutAccessoryView setImage:image];
    }
    UIButton *buttonToViewDetails = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    aView.rightCalloutAccessoryView=buttonToViewDetails;


}

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)aView calloutAccessoryControlTapped:(UIControl *)control
{

    NSLog(@"hello");
}

私が尋ねた他のすべての質問は、私が何かばかげたことをしたことが判明しました。しかし、私はそれを何年も見て座っていて、見ることができません!

あなたの洞察に感謝します!

4

1 に答える 1

2

didSelectAnnotationView にボタンを追加するのは遅すぎることがわかりました。

誰かが実際に注釈を選択しない限り、ボタンを作成しないことで効率的にしようとしていると思っていましたが、(何らかの理由で?) ボタンが didSelectAnnotationView で作成された場合、デリゲート メソッドをトリガーしません。

これを viewForAnnotation メソッドに移動したところ、機能しました。

于 2012-07-26T08:53:44.763 に答える