Как программно изменить метку в UIView, созданную в nib-файле?

У меня проблемы с изменением текста в метке программно.

Когда я запускаю следующий код, NSLog отображает "Установка myLabel = Hello World!", Но метка на экране не изменяется.

    UIViewOverlay *overlayWindow;
    overlayWindow = [[[NSBundle mainBundle] loadNibNamed:@"UIViewOverlay" owner:self options:nil] objectAtIndex:0];
    [self addSubview:overlayWindow];

    [overlayWindow setMyLabel:@"Hello World!"];

Мой NIB-файл имеет окно 300x300 с некоторыми ярлыками и кнопками. В розетке есть ярлык, который подключен к myLabel. UIView отображает только то, что текст нельзя изменить программно.

UIViewOverlay.h

#import <UIKit/UIKit.h>

@interface UIViewOverlay : UIView {
    IBOutlet UILabel *myLabel;
}
- (void)setMyLabel:(NSString *) label;

@end

UIViewOverlay.m

#import "UIViewOverlay.h"

@implementation UIViewOverlay

- (void)setMyLabel:(NSString *) label {
    myLabel.text = label;                // THIS LINE IS NOT WORKING! :-(
    NSLog(@"Setting myLabel to = %@", label);    // This line is working.
 }

@end

Заранее спасибо..

2 ответа

Решение

Вы используете неверное имя метода доступа для своего метода, чтобы установить строку метки.

В какао, setFoo это метод, с помощью которого переменная экземпляра называется foo назначен. Это не просто соглашение, от него зависят многие области функциональности, например, использование свойств, кодирование значения ключа и т. Д.

В вашем коде ваша метка называется myLabel, Ваш метод для установки текста этой метки называется setMyLabel, Либо это приводит к тому, что ваша розетка не подключается при загрузке пера, так как среда выполнения может пытаться использовать этот метод для назначения метки для вашей переменной экземпляра, во-первых, или все вышеперечисленное не имеет никакого эффекта, и у вас есть просто не подключена ваша розетка.

Убедитесь, что в вашем коде есть объект для метки, как в следующем примере:

    IBOutlet UILabel* aLabel;  

А в конструкторе интерфейсов (вы, возможно, уже сделали это): подключите выход aLabel (или любое другое имя, которое вы используете) к фактической этикетке. Это можно сделать, нажав и перетащив элемент управления из объекта "Владелец файла" в окне документа на метку в представлении. Появится маленькое серое окно, по крайней мере, с двумя вариантами, один из которых будет aLabel, определенный ранее, а другой будет представлением (это выход по умолчанию, необходимый для контроллеров представления, он будет иметь черту, чтобы указать, что он уже подключен к что-то). Нажмите на опцию aLabel, чтобы выбрать ее. (Я буду честен, без моего Mac передо мной, я скопировал большинство инструкций этого параграфа из этой ссылки.)

У вас есть объект с именем aLabel, который вы теперь можете обрабатывать как любую другую переменную. Если вы хотите изменить текстовое значение, попробуйте это:

aLable.text = @"some text";

Может быть, вы не сделали связь. Можете ли вы попробовать следующее?

#import "UIViewOverlay.h"

@implementation UIViewOverlay

- (void)showMyLabel:(NSString *) label {
    NSLog(@"My current label contents (myLabel) = %@", myLabel.text);    // ** changed to myLabel.text
 }

@end

Если вы не можете распечатать исходное значение, значит, вы не подключены.

Надеюсь, это поможет.

Другие вопросы по тегам