Segue 后 UILabel 不更新
UILabel Not Updating After Segue
我转到一个 UIViewController,在它的初始化方法中,应该指定 2 个标签的文本。然而,这并没有发生,文本永远不会改变。所有的连接都是正确的,但是他们什么都不显示,我不明白为什么。
下面是应该更改此特定 ViewController.
的 UILabel 的代码
-(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;
有什么想法吗?
在 initWithCoder:
中,视图尚未加载,这意味着即使连接正确,您的插座仍指向 nil。
只有在第一次调用视图控制器的 view
时才构建视图并连接插座。
考虑在 viewDidLoad
或 viewWillAppear:
中执行此操作。
这更像是一种风格选择,但您可能想要综合您的属性。您可以在 init 方法上方使用 @synthesize myProperty;
来执行此操作,现在您可以像这样设置对象的属性:myLabel.text = @"Hello";
根据您调用此视图控制器的方式,可能不会始终调用 init。尝试将文本设置方法放在 viewDidLoad
甚至 viewWillAppear
中(你将不得不实现最后一个)
我猜initWithCoder:
没有被调用。
建议在viewDidLoad
.
设置你想要的数据
- (void)viewDidLoad
{
[super viewDidLoad];
self.nameLabel.text = @"NAME";
self.addressLabel.text = @"ADDRESS";
}
如果未解决,请检查视图状态,例如框架、隐藏或 alpha 值。
- (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?
我转到一个 UIViewController,在它的初始化方法中,应该指定 2 个标签的文本。然而,这并没有发生,文本永远不会改变。所有的连接都是正确的,但是他们什么都不显示,我不明白为什么。
下面是应该更改此特定 ViewController.
的 UILabel 的代码-(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;
有什么想法吗?
在 initWithCoder:
中,视图尚未加载,这意味着即使连接正确,您的插座仍指向 nil。
只有在第一次调用视图控制器的 view
时才构建视图并连接插座。
考虑在 viewDidLoad
或 viewWillAppear:
中执行此操作。
这更像是一种风格选择,但您可能想要综合您的属性。您可以在 init 方法上方使用 @synthesize myProperty;
来执行此操作,现在您可以像这样设置对象的属性:myLabel.text = @"Hello";
根据您调用此视图控制器的方式,可能不会始终调用 init。尝试将文本设置方法放在 viewDidLoad
甚至 viewWillAppear
中(你将不得不实现最后一个)
我猜initWithCoder:
没有被调用。
建议在viewDidLoad
.
- (void)viewDidLoad
{
[super viewDidLoad];
self.nameLabel.text = @"NAME";
self.addressLabel.text = @"ADDRESS";
}
如果未解决,请检查视图状态,例如框架、隐藏或 alpha 值。
- (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?