1

マップ注釈ビューの詳細開示インジケーターをセグエに接続しようとしています。なぜか潰れてます。参考までに-これはUIButton(ストーリーボードで作成されたコントロールドラッグ接続を使用して)から機能しました。

次のコードで発生するエラーは、「認識されないセレクターがインスタンスに送信されました」です。

MKAnnotationView詳細開示インジケーターを含むコードは次のとおりです。

 - (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
    {
        MKPinAnnotationView *mapPin = nil;
        if(annotation != map.userLocation) 
        {
            static NSString *defaultPinID = @"defaultPin";
            mapPin = (MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
            if (mapPin == nil )
            {
                mapPin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation 
                                                          reuseIdentifier:defaultPinID];
                mapPin.canShowCallout = YES;

                UIButton *disclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                [disclosureButton addTarget:self action:@selector(prepareForSegue:) forControlEvents:UIControlEventTouchUpInside];

                mapPin.rightCalloutAccessoryView = disclosureButton;

            }
            else
                mapPin.annotation = annotation;

        }
        return mapPin;
    }

prepareForSegueメソッドは次のとおりです。

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        // Make sure we're referring to the correct segue
        if ([[segue identifier] isEqualToString:@"ShowMoreInfo"]) {

            // Get reference to the destination view controller
            MoreDetailViewController *mdvc = [segue destinationViewController];


            [mdvc setSelectedItemName:[NSString stringWithFormat:@"%@", placeName.text]];
            [mdvc setSelectedItemAddress:[NSString stringWithFormat:@"%@", placeFormattedAddress.text]];

            [mdvc setSelectedItemWeb:[NSString stringWithFormat:@"%@", placeWebsite.text]];
            [mdvc setSelectedItemRating:[NSString stringWithFormat:@"%@", placeRating.text]];
      //      [mdvc setSelectedItemDistance:[NSString stringWithFormat:@"%@", placeDistance.text]];

        }
    }
4

2 に答える 2

1

prepareForSegue メソッドを明示的に呼び出すのではなく、セグエの変更を実行する別のメソッドを作成する必要があります。このようなもの:

mapView:map viewForAnnotation:annotation メソッドを変更して、この行を変更する必要があります

 [disclosureButton addTarget:self action:@selector(myMethod) forControlEvents:UIControlEventTouchUpInside];

次に、メソッドでビューの変更を実行します

 -(void)myMethod{ 
[self performSegueWithIdentifier:@"ShowMoreInfo" sender:self];
 }

私はそれがうまくいくと思います。

于 2012-04-27T17:47:44.827 に答える
1

注釈が表示され、コールアウトが選択された後、 mapView :didSelectAnnotationView:を使用してから、mapView:annotationView:calloutAccessoryControlTapped:を使用することで助けになると思います。

于 2012-04-27T18:12:05.417 に答える