Извините, я прочитал кучу учебников о том, как создать пользовательский выносок для аннотации MapKit. Он работает с NSLog, но я не могу отобразить информацию в выносках.EDITED: MapKit Обозначения аннотации. Отрегулируйте размер UIPopoverController
У меня есть два типа значков на карте. Это мой метод viewForAnnotation:
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if (! [annotation isKindOfClass:[IGAMapAnnotation class]]) {
return nil;
}
IGAMapAnnotation *myLocation = (IGAMapAnnotation *) annotation;
self.typeIsFix = [myLocation.navaidType isEqualToString:@"FIX"];
self.typeIsPort = [myLocation.navaidType isEqualToString:@"PORT"];
int planeImageViewTag = 42;
NSString *reuseId;
if (self.typeIsPort)
reuseId = @"IGAMapAnnotationPort";
else if (self.typeIsFix)
reuseId = @"IGAMapAnnotationFix";
else
reuseId = @"IGAMapAnnotationOther";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
if (annotationView == nil)
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
annotationView.enabled = YES;
UIButton *annotationInfo = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annotationView.rightCalloutAccessoryView = annotationInfo;
annotationView.canShowCallout = YES;
if (self.typeIsPort)
{
annotationView.image = [UIImage imageNamed:@"mapPORT.png"];
annotationView.centerOffset = CGPointMake(0, 0);
}
else if (self.typeIsFix)
{
annotationView.image = [UIImage imageNamed:@"mapFIX.png"];
annotationView.centerOffset = CGPointMake(0, 0);
}
else
return nil;
}
else
{
annotationView.annotation = annotation;
}
return annotationView;
}
Тогда у меня есть метод calloutAccessoryControlTapped
- (void)mapView:(MKMapView *)mapview annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
IGAAnnotationInfoViewController *popOverCallout = [[IGAAnnotationInfoViewController alloc]init];
UIPopoverController *popOver = [[UIPopoverController alloc] initWithContentViewController:popOverCallout];
popOver.popoverContentSize = CGSizeMake(300, 200);
[popOver presentPopoverFromRect:view.bounds
inView:view
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
Я также создал UIViewController, который я назначенную UIPopoverController.
Теперь, когда я нажимаю кнопку на моей аннотации, я вижу пробел для текста. Отлично. Если я назначу текст на этикетке в UIViewController, он также прекрасно работает (следующий мой UIViewController.m):
- (void)viewDidLoad {
[super viewDidLoad];
txtCallout = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 300, 200) ];
txtCallout.font = [UIFont fontWithName:@"Arial Rounded MT Bold" size:(14.0)];
txtCallout.numberOfLines = 0;
txtCallout.clipsToBounds = YES;
txtCallout.backgroundColor = [UIColor clearColor];
txtCallout.textColor = [UIColor blackColor];
txtCallout.textAlignment = NSTextAlignmentLeft;
txtCallout.text = @"text\ntext\ntext";
[self.view addSubview:txtCallout];
}
Но как вставить текст из моего метода аннотаций? Также текст должен отличаться в зависимости от типа значка, например @ «PORT, PORT» или «FIX, FIX». Как мне это сделать?
EDIT:
мне удалось отобразить выноски с необходимой информацией передается. Моя последняя проблема заключается в том, что иногда моя выноска - 3 строки, иногда - целых 15. Как можно настроить выноску автоматически на количество строк в моей строке? Должен ли я изменить свой popoverContentSize или мой размер метки в UIViewController?
Большое вам спасибо!