При регистрации UIButton titleLabel отображается CALayer …. не строка

#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. На самом деле это не правильный ответ на вопрос. Джейкобу лучше удалось обнаружить простую ошибку.