UIlabels инициализируется в другом месте, кроме.storyboard (ссылка на Outlet) или и загружает int в виду загрузил?
У меня есть пользовательский интерфейс, который был сделан только с использованием кода: все (UIlabels и т. Д.) Инициализируются внутри viewdidload контроллера представления.
.час
@interface homeViewController : UIViewController {
//IBOutlet UILabel *lbl; // not using an outlet anyway...
UILabel *lbl;
}
@property(nonatomic,retain) UILabel *lbl;
@end
.m
@interface homeViewController ()
@end
@implementation homeViewController
@synthesize lbl;
-(void)updateLabel {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
double temptemp2 = [ud doubleForKey:@"somekey"];
lbl.text = [NSString stringWithFormat:@"%f", temptemp2];
[ud synchronize];
}
затем в viewdidload я просто вызываю [self updateLabel]; и ярлык не обновляется. однако, если я поместил тот же код, который был внутри метода updateLabel, загрузился, код работает.
UIlabel инициализируется (alloc init) перед [self updateLabel]; внутри зрения действительно загрузился.
Как правильно инициализировать объект метки, если я не хочу делать это с помощью конструктора интерфейса? чтобы он был доступен из других методов внутри того же контроллера представления?
1 ответ
Вы создали @property в вашем контроллере представления для метки, однако, когда вы создаете метку, вы назначаете ее локальной переменной, а не свойству. Из-за этого вы не можете ссылаться на него позже из другого метода, когда хотите присвоить значение.
В вашем viewDidLoad
, присвойте объект UILabel, который вы создали, свойству следующим образом:
self.lbl = lbl;
Тогда в вашем updateLabel
метод:
self.lbl.text = [NSString stringWithFormat:@"%f", temptemp2];