Кнопка вызова аннотации MKMapView для DetailView? - PullRequest
0 голосов
/ 14 июня 2010

У меня есть аннотации в 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 ]

1 голос
/ 03 сентября 2010

Проверьте, есть ли у вас контроллер навигации для вашего viewController, если это просто viewController, то он не может выдвинуть viewController, потому что в нем нет контроллера навигации.

0 голосов
/ 14 октября 2011

В прошлом у меня была такая же проблема, поэтому я просто использовал другой код для переключения представлений:

-(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];
}

Это довольно простой метод переключения вида, и он прекрасно работает для меня.

0 голосов
/ 29 декабря 2010

Вы не показываете весь свой код. Но я думаю, вы просто забыли инициализировать self.detailViewController.

попробуйте добавить это в ваш метод viewDidLoad:

self.detailViewController = [[[DetailViewController alloc]init]autorelease];
0 голосов
/ 15 июня 2010

Не является ли detailViewController неинициализированным?Вы не показываете весь свой код, но я полагаю, что у вас могут быть проблемы с подготовкой и отправкой представления.

Почему вы объявляете detailViewController как IBOUTlet?

Также,Я думаю, что вы можете / намереваетесь сделать это на вашем detailViewController не в этом контроллере:

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