Если я правильно понимаю, вы хотите добавить кнопку раскрытия, которая позволила бы вам представить новый вид с информацией о текущей аннотации контакта.Чтобы получить кнопку раскрытия, вам просто нужно реализовать этот код:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
if (!pinView) {
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"] autorelease];
pinView.pinColor = MKPinAnnotationColorRed;
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.rightCalloutAccessoryView = rightButton;
} else {
pinView.annotation = annotation;
}
return pinView;
}
Теперь, когда вы нажмете на булавку в mapView, кнопка раскрытия отобразится в представленном представлении.Затем вам нужно будет использовать следующий метод, чтобы сообщить приложению, что делать, когда нажата кнопка раскрытия.
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
В этом методе вы можете представить всплывающее окно или модальное окно или выдвинуть представление или любое другоеВы хотели бы сделать с информацией о текущем местоположении.Вам также не нужно создавать новый кончик для каждого.Проще всего было бы синтезировать значения в этом контроллере представления, такие как phoneNumber
и website
, и тому подобное.Затем в последнем методе, где вы представляете представление, передайте значения по мере необходимости.Например,
NewView *vc = [[NewView alloc] initWithNibName:@"NewView" bundle:nil];
vc.phoneNumber = // the phone number of this location;
vc.website = // the website;
и т. Д. Перед представлением представления.Я надеюсь, что это поможет
РЕДАКТИРОВАТЬ: Чтобы избавиться от этой ошибки, для всего, что вы синтезируете, вы должны объявить в заголовке.Таким образом, у вас будет
@interface FirstViewController : UIViewController {
IBOutlet MKMapView *mapView;
//stores go here!
//declare store names as Company *cityState
AddressAnnotation *chiliAuburnAlabama;
AddressAnnotation *tuttifruttiHomewoodAlabama;
NSString *website;
// the rest of your synthesized attributes you want in the view controller;
}
-(IBAction) updateLocation;
-(IBAction) setMap:(id)sender;
-(IBAction) showPin;
@property (nonatomic, retain) NSString *website;
// This is the property that will get rid of your error and you should do it to any other attributes you want to pass into the controller;
@end
Вы захотите это и в заголовке аннотации, если будете использовать его там.Он сообщает той части кода, что он должен ожидать, что ему будет отправлена некоторая строка, и он будет знать, как обрабатывать ее сохранение.
Что касается вызова вашего метода GoToMap, вам следует настроить делегат для вашего MoreInfoкласс, когда вы создаете это.Таким образом, в вашем заголовке MoreInfo у вас будет, среди прочего,
@interface MoreInfo .... {
id delegate;
// everything else;
}
@property (nonatomic, assign) id delegate;
// your methods and other properties;
@end
Затем, когда вы создадите его в вашем контроллере представления, у вас будет
MoreInfo *moreInfoView = [[MoreInfo alloc] initWithNibName:@"MoreInfo" bundle:nil];
moreInfoView.title = view.annotation.title ;
moreInfoView.delegate = self;
// this assigns the current view controller as its delegate;
//moreInfoView.getDirections = [NSURL URLWithString:[NSString stringWithFormat: @"http://maps.google.com/maps?q=%@@%1.6f,%1.6f&z=10", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude]];
moreInfoView.getWebsite = view.annotation.website;
[self.navigationController pushViewController:moreInfoView animated:YES];
Наконец, когда выЕсли вы хотите вызвать GoToWebsite из своего MoreInfo, вы можете позвонить
[self.delegate GoToWebsite];
Это, конечно, предполагает, что метод находится в вашем первом контроллере представления (что, клянусь, было, но я не могу найти его внезапно)).
Но, в принципе, так и было бы