我在带有标注的MKMapView中有注释。在这个标注中有一个“右箭头”按钮。单击它时,我想打开一个Detail View,一个带有自己的nib文件的额外UIViewController等。我使用下面的代码:
在我的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;
也许有人可以帮助我:)。
谢谢!
答案 0 :(得分:1)
检查你的viewController是否有导航控制器,如果它只是一个viewController,那么就不能推送一个viewController,因为它没有导航控制器。
答案 1 :(得分:0)
不是detailViewController未初始化?你没有显示你的所有代码,但我相信你可能会因为准备视图并推动它而有些混乱。
为什么要将detailViewController声明为IBOUTlet?
另外,我认为您可能希望/打算在您的detailViewController上执行此操作,而不是在此控制器中:
[self.navigationController setToolbarHidden:YES animated:NO];
答案 2 :(得分:0)
您没有显示所有代码。但我想,你只是忘了初始化self.detailViewController。
尝试在viewDidLoad方法中添加它:
self.detailViewController = [[[DetailViewController alloc]init]autorelease];
答案 3 :(得分:0)
我过去遇到过同样的问题,因此我只使用不同的代码来切换视图:
-(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];
}
这是一个非常基本的视图切换方法,它对我来说很好。