Кнопка вызова аннотации MKMapView для DetailView?
У меня есть аннотации в MKMapView с выносками. В этих выносках есть кнопка "Стрелка вправо". Когда я нажимаю на него, я хочу открыть подробный вид, дополнительный 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;
}
Кнопка работает, потому что, когда я даю NSLog внутри метода showDetais, он выводится на консоль. Проблема в том, что НИЧЕГО не происходит. При нажатии на кнопку, как будто нет кнопки. Там нет ошибки отладки или исключения, просто ничего.
заголовок MapView выглядит примерно так:
@interface MapViewController : UIViewController <MKMapViewDelegate> {
MKMapView *map;
NSMutableDictionary *dictionary;
EntryDetailController *detailViewController;
}
@property (nonatomic,retain) IBOutlet MKMapView *map;
@property (nonatomic,retain) IBOutlet EntryDetailController *detailViewController;
Может быть, кто-то из вас может помочь мне:)
Спасибо!
4 ответа
Проверьте, есть ли у вас контроллер навигации для вашего viewController, если это просто viewController, то он не может выдвинуть viewController, потому что в нем нет контроллера навигации.
У меня была такая же проблема в прошлом, поэтому я просто использовал другой код для переключения представлений:
-(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];
}
Это довольно простой метод переключения вида, и он отлично работает для меня.
Вы не показываете весь свой код. Но я думаю, вы просто забыли инициализировать self.detailViewController.
попробуйте добавить это в ваш метод viewDidLoad:
self.detailViewController = [[[DetailViewController alloc]init]autorelease];
Не является ли detailViewController неинициализированным? Вы не показываете весь свой код, но я полагаю, что у вас могут быть проблемы с подготовкой представления и его продвижением.
Почему вы объявляете detailViewController как IBOUTlet?
Кроме того, я думаю, что вы можете / намереваетесь сделать это на вашем detailViewController не в этом контроллере:
[self.navigationController setToolbarHidden:YES animated:NO];