Проблема с настройкой значения для UILabel (iPhone SDK) - PullRequest
1 голос
/ 21 января 2010

Я довольно новичок в iPhone SDK, поэтому, пожалуйста, прости меня, если этот ответ смехотворно очевиден.

У меня ViewController, подключенный к файлу .xib (они называются FirstViewController)

У меня также есть собственный класс MyCustomClass. В этом классе у меня есть такой метод:

- (void)setTheText {
    [myLabel setText:@"foo"];
}

Я хочу вызвать этот метод, чтобы установить текст в метке в FirstViewController.xib

Пока что я сделал это:

Перетащите «Объект» в Interface Builder и установите для класса значение: MyCustomClass Подключил IBOutlet myLabel из MyCustomClass к UILabel в представлении.

Однако, когда я запускаю программу и нажимаю кнопку, чтобы установить метку (которая находится в FirstViewController.m), что-то вроде:

- (IBAction)doSomething:(id)sender {
   MyCustomClass *customClass = [MyCustomClass alloc] init];
   [customClass setTheText];
}

Это не установлено, хотя. NSLog(@"%@",[myLabel text]); возвращает (ноль)

Xcode не показывает ошибок или предупреждений, что может быть не так?

Спасибо

Michael

Дополнительная информация:

Интерфейс для MyCustomClass.h:

#import <UIKit/UIKit.h>

@interface MyCustomClass : NSObject {
    UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;

- (void)setTheText;

@end

Ответы [ 4 ]

3 голосов
/ 21 января 2010

Вы не хотите создавать новый экземпляр вашего пользовательского класса в вашем методе действия.

Есть пара способов сделать то, что вы хотите.

Опция 1 - дать вашему контроллеру представления ссылку на ваш пользовательский объект. Для этого создайте розетку типа MyCustomClass * в вашем контроллере представления, подключите эту розетку к новому объекту, созданному в файле XIB, а затем избавьтесь от выделения в вашем методе действия:

- (IBAction)doSomething:(id)sender {       
    [customClass setTheText];
}

Опция 2 позволяет вашему CustomClass обрабатывать как метку , так и метод действия. Для этого вы можете упростить вещи еще больше. Вставьте розетку для UILabel в ваш CustomClass, а затем просто преобразуйте ваш setTheText метод в действие:

- (IBAction)setTheText:(id)sender {
    [myLabel setText:@"foo"];
}

Теперь подключите это действие к своей кнопке, и все должно работать как шарм.

Примечание: Вы, вероятно, должны использовать имя метода, которое не начинается с "set", так как они обычно используются для установщиков свойств как часть системы KVC / KVO Какао. Вместо этого я бы назвал это что-то вроде changeLabel или эквивалентным.

2 голосов
/ 21 января 2010

UILabel также имеет свойство text для установки значения, вам может показаться, что проще.

myObject.myLabel.text = @"Your text";
2 голосов
/ 21 января 2010

Ваш экземпляр customClass здесь совершенно не связан с NIB. Вы создали новый объект, используя + alloc. Если вы хотите изменить определенный MyCustomClass в вашей NIB, то FirstViewController нужен IBOutlet, который указывает на него.

0 голосов
/ 18 августа 2011

ну, вы назвали свой лейбл двумя вещами, сначала не ibaction, а затем ibaction в свойстве.

...