Как изменить размер выноски после сброса заголовка/подзаголовка

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

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

2) Кроме того, я сначала проверяю, действительно ли у аннотации есть заголовок, прежде чем сбрасывать заголовок, но после проверки у меня возникли проблемы с его приведением, может ли кто-нибудь помочь мне с этим? Я все еще новичок в Objective-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?
 }

}

person Ben Holland    schedule 13.10.2010    source источник
comment
Обновление: после дополнительного тестирования я обнаружил, что пузырь выноски правильно изменяет размер, но только при втором касании. т. е. всплывает всплывающее окно, размер которого не изменяется должным образом, нажмите на что-то еще, чтобы пузырь исчез, снова нажмите на аннотацию и убедитесь, что ее размер изменился должным образом.   -  person Ben Holland    schedule 14.10.2010


Ответы (1)


Все еще есть некоторые проблемы, но, возможно, они приближаются. Я пробовал это, но все равно не повезло. Я частично использую код из 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";
person Ben Holland    schedule 15.10.2010
comment
Я также пробовал [self willChangeValueForKey:@title]; // Обходной путь для SDK 3.0, иначе информация о выноске не будет обновляться. [сам сделалChangeValueForKey:@title]; // Обходной путь для SDK 3.0, иначе информация о выноске не будет обновляться. - person Ben Holland; 15.10.2010
comment
Похоже, MKAnnotationCalloutInfoDidChangeNotification устарел, разработчик. apple.com/library/ios/#documentation/MapKit/Reference/ Что следует использовать вместо этого? - person Ben Holland; 15.10.2010
comment
Примечание. Самая последняя запись на этом форуме, кажется, описывает мою проблему. iphonedevsdk.com/forum/iphone-sdk- development/ Возможно ли, что из-за того, что я пытаюсь изменить заголовок в событии касания, перерисовка для выноски не происходит до следующего события касания? - person Ben Holland; 15.10.2010
comment
Это кажется возможным решением моей проблемы. Но для жизни я не могу понять это. stackoverflow.com/questions/978897/ - person Ben Holland; 15.10.2010