2010-10-13 1 views
3

Я создал имя MKAnnotation PushPin, у которого есть заголовок и субтитры. Я хочу, чтобы иметь возможность динамически менять название позже. Я близок, поэтому мне не нужно было бы создавать совершенно новый AnnotationView, но если мне нужно догадаться, что все в порядке. Моя проблема заключается в том, что, как только я изменяю текст для названия, окно не изменяет размер, и некоторый текст может быть отрезан в зависимости от того, насколько значительным был заголовок.Как изменить размер выноска пузыря после сброса заголовка/субтитров

1) Есть ли событие, которое я могу вызвать, чтобы изменить размер окна пузырьков вызова снова?

2) Кроме того, я проверяю, чтобы аннотация фактически имела заголовок, прежде чем я перехожу к сбросу заголовка, но у меня возникли проблемы с его литье после проверки, может ли кто-нибудь помочь мне с этим? Я до сих пор новичок в объективе-c, и этот со мной время от времени.


#import <Foundation/Foundation.h> 
#import <MapKit/MKAnnotation.h> 

@interface PushPin : NSObject <MKAnnotation> { 
CLLocationCoordinate2D _coordinate; 
NSString *_title; 
NSString *_subtitle; 
NSString *_ID; 
} 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
@property (nonatomic, retain) NSString *title; 
@property (nonatomic, retain) NSString *subtitle; 
@property (nonatomic, retain) NSString *ID; 

- (id) initWithCoordinateAndInformation:(CLLocationCoordinate2D)coordinate title:(NSString *)title subtitle:(NSString *)subtitle; 

@end 

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
NSLog(@"Annotation was TAPPED!"); 

if ([view.annotation isKindOfClass:[PushPin class]]) { 
    view.annotation.title = @"test"; 

      // warning here, that this might not be implemented... 
      // but it is for this class type, how do I cast it to the correct type? 
} 

} 
+0

Обновление: после большего количества испытаний я обнаружил, что пузырь выноски правильно изменяет размер, но только второй кран. т. е.: всплывает пузырь пузырька и не изменяется должным образом, нажмите на что-то еще, так что пузырь идет влево, снова коснитесь аннотации и убедитесь, что он правильно изменился. –

ответ

0

Тем не менее некоторые проблемы, но все ближе, может быть. Я попробовал это, но все равно не повезло. Я частично опираясь на код из http://digdog.tumblr.com/post/252784277/mapkit-annotation-drag-and-drop-with-callout-info

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    NSLog(@"Annotation was TAPPED!"); 

    if ([view.annotation isKindOfClass:[PushPin class]]) { 
     ((PushPin *)view.annotation).title = @"test"; 
    } 

    [self willChangeValueForKey:@"subtitle"]; // Workaround for SDK 3.0, otherwise callout info won't update. 
    [self didChangeValueForKey:@"subtitle"]; // Workaround for SDK 3.0, otherwise callout info won't update. 

    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"MKAnnotationCalloutInfoDidChangeNotification" object:self]]; 
} 

Хорошая новость в том, что я понял, моя проблема литья, для тех, кто может быть любопытно.

((PushPin *)view.annotation).title = @"test"; 
+0

Я также пробовал, [self willChangeValueForKey: @ "title"]; // Обходной путь для SDK 3.0, иначе информация о выноске не будет обновляться. [self didChangeValueForKey: @ "title"]; // Обходной путь для SDK 3.0, иначе информация о выноске не будет обновляться. –

+0

Кажется, MKAnnotationCalloutInfoDidChangeNotification обесценивается, http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKAnnotationView_Class/Reference/Reference.html Что я должен использовать вместо этого? –

+0

Примечание: самая последняя запись на этом форуме, похоже, описывает мою проблему. http://www.iphonedevsdk.com/forum/iphone-sdk-development/50522-draggable-annotation-mkmapview.html Возможно ли, что, поскольку я пытаюсь изменить заголовок в событии касания, чтобы перерисовать для выноски не происходит до следующего события касания? –