#iphone #objective-c #mapkit
#iPhone #objective-c #mapkit
Вопрос:
Я не хочу, чтобы pin-код вызывался непосредственно на карте, я хочу, чтобы это действие на кнопке вызывало аннотацию pin-кода.
Когда я вызываю этот метод при событии нажатия кнопки, мое приложение вылетает. Я хочу вызывать аннотацию при нажатии кнопки. Могу ли я вызвать этот весь метод на кнопке?
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pin = (MKPinAnnotationView *) [self.map dequeueReusableAnnotationViewWithIdentifier: @"restMap"];
if (pin == nil) {
pin = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"restMap"] autorelease];
} else {
pin.annotation = annotation;
}
pin.pinColor = MKPinAnnotationColorRed
pin.canShowCallout = YES;
pin.animatesDrop = NO;
UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
NSInteger annotationValue = [self.annotations indexOfObject:annotation];
detailButton.tag = annotationValue;
[detailButton addTarget:self action:@selector(showDetailView:) forControlEvents:UIControlEventTouchUpInside];
pin.rightCalloutAccessoryView = detailButton;
return pin;
}
Комментарии:
1. Проверьте это, возможно, это вам поможет. Создание пользовательских выносок аннотаций карты
2. Перейдите к образцу кода Apple MapCallout , они сделали именно то, что вы хотите.
Ответ №1:
Метод, который вы пытаетесь вызвать, является методом делегирования MapView и должен вызываться только вашим MapView. Этот метод предназначен только для предоставления представления аннотации «по требованию», когда это необходимо MapView. Т.е. Когда аннотация находится в видимой области MapView или вот-вот переместится в нее.
Вам нужно добавить объект аннотации в ваш MapView. Этот объект должен соответствовать протоколу MKAnnotation. http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKAnnotation_Protocol
Вы добавите объект в MapView, вызвав [yourMapView addAnnotation: yourAnnotationObject] в методе IBAction, который вызывается при нажатии вашей кнопки.