Регистрация UIButton titleLabel отображает CALayer .... не строка - PullRequest
0 голосов
/ 04 октября 2011

Я пытаюсь получить строку 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>>

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Это выглядит хорошо, хотя у вас, похоже, неправильное представление о том, что возвращает -titleLabel.

-titleLabel возвращает экземпляр UILabel -> Чтобы получить текстовую строку , содержащуюся в UILabel, необходимо вызвать метод получения -text.

0 голосов
/ 04 октября 2011

У вас где-то должна быть ошибка двойного выпуска, что означает, что ваша строка title была освобождена слишком рано, и ее память была занята другим объектом (CALayer). Ищите NSZombieEnabled или просто xcode zombies, и вы сможете включить обнаружение зомби, которое даст вам больше информации.

...