簡體   English   中英

MKMapView批注標注按鈕到DetailView?

[英]MKMapView Annotation Callout Button to DetailView?

我在帶有標注的MKMapView中具有注釋。 在此標注中,有一個“向右箭頭”按鈕。 單擊它時,我想打開一個Detail View,一個額外的UIViewController及其自己的nib文件,等等。我使用以下代碼:

在我的MapViewController中:

- (void)showDetails:(id)sender {
    // the detail view does not want a toolbar so hide it
    [self.navigationController setToolbarHidden:YES animated:NO];
    NSLog(@"pressed!");
    [self.navigationController pushViewController:self.detailViewController animated:YES];
    NSLog(@"pressed --- 2!");
}

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(Annotation *) annotation {

    if(annotation == map.userLocation) return nil;

    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";


    MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
                                           initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
    customPinView.pinColor = MKPinAnnotationColorRed;
    customPinView.animatesDrop = YES;
    customPinView.canShowCallout = YES;

    UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [rightButton addTarget:self
                                    action:@selector(showDetails:)
                forControlEvents:UIControlEventTouchUpInside];
    customPinView.rightCalloutAccessoryView = rightButton;

    UIImageView *memorialIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"googlemaps_pin.png"]];
    customPinView.leftCalloutAccessoryView = memorialIcon;
    [memorialIcon release];

    return customPinView;


}

該按鈕起作用,因為當我在showDetais方法內輸入NSLog時,它會打印到控制台。 問題是,什么都沒有發生。 單擊該按鈕時,就好像沒有任何按鈕。 沒有調試錯誤或異常,僅此而已。

MapView標頭看起來像這樣:

@interface MapViewController : UIViewController <MKMapViewDelegate> {
    MKMapView *map;
    NSMutableDictionary *dictionary;
    EntryDetailController *detailViewController;
}

@property (nonatomic,retain) IBOutlet MKMapView *map;
@property (nonatomic,retain) IBOutlet EntryDetailController *detailViewController;

也許有人可以幫助我:)

謝謝!

檢查您的viewController是否具有導航控制器,如果它只是一個viewController,則由於其中沒有導航控制器,因此無法推送viewController。

detailViewController是否未初始化? 您不會顯示所有代碼,但我相信您可能會在准備視圖和推送視圖時遇到一些麻煩。

為什么要將detailViewController聲明為IBOUTlet?

另外,我認為您可能希望/打算不在您的detailViewController上執行此操作:

[self.navigationController setToolbarHidden:YES animated:NO];

您不會顯示所有代碼。 但是我想,您只是忘了初始化self.detailViewController。

嘗試將其添加到您的viewDidLoad方法中:

self.detailViewController = [[[DetailViewController alloc]init]autorelease];

過去我遇到過同樣的問題,因此我只是使用了不同的代碼來切換視圖:

-(IBAction)showDetails:(id)sender
{
    NSLog(@"button clicked");
    MapViewController *thisMap = (MapViewController *)[[UIApplication sharedApplication]  delegate];
    detailViewController *detailView = [[detailViewController     alloc]initWithNibName:@"detailViewController" bundle:nil];
    [thisMap switchViews:self.view toView:dvc.view];
}

這是一種非常基本的視圖切換方法,對我來說效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM