[英]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.