Как программно изменить метку в UIView, созданную в nib-файле? - PullRequest
1 голос
/ 06 октября 2011

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

Когда я запускаю следующий код, 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 ]

1 голос
/ 06 октября 2011

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

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

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

1 голос
/ 06 октября 2011

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

    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

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

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

...