2010-01-21 4 views
1

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

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

У меня есть пользовательский класс под названием MyCustomClass. В этом классе, у меня есть метод, как это:

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

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

До сих пор я сделал это:

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

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

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

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

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

Спасибо,

Майкл

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

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

#import <UIKit/UIKit.h> 

@interface MyCustomClass : NSObject { 
    UILabel *myLabel; 
} 

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

- (void)setTheText; 

@end 
+0

Можете ли вы разместить интерфейс для MyCustomClass? Как вы определили в нем myLabel? – Dana

+0

Добавил (а) на главный пост – Michael

ответ

2

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

+0

Спасибо! Это решило мою проблему! – Michael

2

UILabel также имеет свойство, называемое текстом, чтобы установить значение, это может быть проще.

myObject.myLabel.text = @"Your text"; 
+0

Спасибо за подсказку. Я знаю о синтаксисе точки, но у меня есть «вещь» против него = P, предпочитайте старые старые квадратные скобки! – Michael

+0

Gotcha, это больше удобно для людей, привыкших к другим языкам. – Convolution

3

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

Существует несколько способов сделать то, что вы хотите.

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

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

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

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

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

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

0

Хорошо, что вы назвали свой ярлык двумя вещами, сначала не-ибетом, а затем иембацией в свойстве.

Смежные вопросы