Uilabel在SEGUE之后不进行更新



i将uiviewController转移到uiviewController中,在其INIT方法中,应该指定2个标签的文本。但是,这不会发生,文字永远不会改变。所有连接都是正确的,但是它们没有显示任何内容,我不知道为什么。

以下是应该更改此特定viewController的Uilabels的代码。

-(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:。建议在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构成的对象的iboutlet是nil

为什么initwithCoder不正确初始化项目?

initWithCoder:中的视图尚未加载,这意味着您的插座仍然指向零,即使连接正确。

当第一个调用视图控制器的view时,视图是构造的,并且连接出口。

考虑在viewDidLoadviewWillAppear:中这样做。

这更像是一种样式选择,但您可能需要综合您的属性。您可以使用init方法上方的@synthesize myProperty;进行此操作,现在可以设置这样的对象的属性:myLabel.text = @"Hello";

根据您如何调用此视图控制器,可能并不总是调用INIT。尝试将文本设置方法放在viewDidLoad甚至viewWillAppear中(您必须实现最后一个)

相关内容

最新更新