#iphone #uibutton #title #mkannotation #ibaction
#iPhone #uibutton #Название #mkannotation #ibaction
Вопрос:
Я пытаюсь получить строку titleLabel UIButton, но она регистрируется как CALayer… есть предложения?
//ADD TWT BUTTON
twitter_share = [[UIButton alloc] initWithFrame:CGRectMake(200, 44, 29, 28)];
twitter_share.backgroundColor = [UIColor clearColor];
[twitter_share setBackgroundImage:[UIImage imageNamed:@"btn_annotation_share_twitter.png"] forState:UIControlStateNormal];
twitter_share.titleLabel.hidden = YES;
twitter_share.titleLabel.alpha = 0;
twitter_share.tag = 20;
[twitter_share setTitle:@"test!" forState:UIControlStateNormal];
UITapGestureRecognizer *tap_twt = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinButtonTap:)];
tap_twt.numberOfTapsRequired = 1;
[twitter_share addGestureRecognizer:tap_twt];
[tap_twt release];
[annotationView addSubview:twitter_share];
- (void) handlePinButtonTap:(UITapGestureRecognizer *)gestureRecognizer {
UIButton *btn = (UIButton *) gestureRecognizer.view;
MKAnnotationView *av = (MKAnnotationView *)[btn superview];
id<MKAnnotation> ann = av.annotation;
NSLog(@"handlePinButtonTap: ann.title=%@", ann.title);
NSString *testBtn = [NSString stringWithFormat:@"%@", [btn titleLabel]];
NSLog(@"handlePinButtonTap: btn title=%@", testBtn);
}
Журнал:
handlePinButtonTap: btn title=<UIButtonLabel: 0x70a14d0; frame = (0 3; 29 22); text = 'test!'; clipsToBounds = YES; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x70a6930>>
Ответ №1:
Это выглядит нормально, хотя у вас, похоже, неправильное представление о том, что -titleLabel
возвращается.
-titleLabel
возвращает UILabel
экземпляр -> Чтобы получить текстовую строку, содержащуюся внутри UILabel
, вы должны вызвать средство -text
получения.
Ответ №2:
Должно быть, где-то произошла ошибка двойного освобождения, что означает, что ваша title
строка была освобождена слишком рано, и ее память была занята другим объектом (the CALayer
). Выполните поиск NSZombieEnabled
или просто xcode zombies
, и вы сможете включить обнаружение зомби, что даст вам больше информации.
Комментарии:
1. Нашел это! Спасибо. Все, что мне нужно было сделать, это использовать
btn.titleLabel.text
вместо[btn titleLabel]
2. На самом деле это не правильный ответ на вопрос. Джейкобу лучше удалось обнаружить простую ошибку.