Как программно изменить метку в 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
Если вы не можете распечатать исходное значение, значит, вы не подключены.
Надеюсь, это поможет.