2015-05-12 5 views
1

Я перехожу к UIViewController, и во время его метода init предполагается указать текст двух меток. Однако этого не происходит, и текст никогда не меняется. Все соединения правильные, но они ничего не отображают, и я не могу понять, почему.UILabel не обновляется после Segue

Ниже приведен код, который должен изменить UILabels для данного конкретного ViewController.

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    if (self = [super initWithCoder:aDecoder]) { 
     _nameLabel.text = @"NAME"; 
     _addressLabel.text = @"ADDRESS"; 
    } 
    return self; 
} 

Ниже файл ".h" для него:

@property (strong, nonatomic) Location *selectedLocation; 

@property (weak, nonatomic) IBOutlet UILabel *nameLabel; 

@property (weak, nonatomic) IBOutlet UILabel *addressLabel; 

Любые мысли?

ответ

1

Я думаю, initWithCoder: не вызывается. Рекомендуется установить необходимые данные в viewDidLoad.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.nameLabel.text = @"NAME"; 
    self.addressLabel.text = @"ADDRESS"; 
} 

Если не удалось, проверьте состояние просмотров, например, фрейм, скрытое или альфа-значение.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    NSLog(@"[nameLabel] frame : %@, hidden : %d, alpha : %@", NSStringFromRect(self.nameLabel.frame), self.nameLabel.hidden, self.nameLabel.alpha); 
    NSLog(@"[addressLabel] frame : %@, hidden : %d, alpha : %@", NSStringFromRect(self.addressLabel.frame), self.addressLabel.hidden, self.addressLabel.alpha); 
} 

ОБНОВЛЕНО: Это из-за того IBOutlet находится в функции initWithCoder:nil.

XIB-instantiated Object's IBOutlet is nil

Why isn't initWithCoder initializing items correctly?

+0

Это трюк, но почему так? Я имею в виду, когда мой объект инициализирован, я даю правильные данные, но это не работает? Кроме того, почему нам не нужно перезагружать представление после выполнения того же кода в viewDidLoad? Все это кажется противоречивым. – Vimzy

1

в initWithCoder: вид еще не загружен, что означает, что ваши выходы все еще указывают на нуль, даже если соединения правильные.

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

Подумайте об этом в viewDidLoad или viewWillAppear:.

+1

Я собирался asnwer такой же, как вы. Я думаю, что этот ответ лучше объяснить и понять. – FormigaNinja

0

Это скорее выбор стиля, но вы можете синтезировать свои свойства. Вы можете сделать это, используя @synthesize myProperty; прямо над вашими методами инициализации. Теперь вы можете установить свойства объектов следующим образом: myLabel.text = @"Hello";

В зависимости от того, как вы вызываете этот контроллер вида, init не всегда может быть вызван. попробуйте ввести методы настройки текста в viewDidLoad или даже viewWillAppear (вам нужно будет реализовать это последнее)

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