awakeFromNib 无法从 UILabel 获取值,也无法禁用 UIButton

Posted

技术标签:

【中文标题】awakeFromNib 无法从 UILabel 获取值,也无法禁用 UIButton【英文标题】:awakeFromNib can't get value from UILabel and can't disable UIButton 【发布时间】:2013-02-28 20:55:11 【问题描述】:

我在单视图应用程序主情节提要中有两个按钮,我想禁用其中一个按钮并使用 awakeFromNib 方法从 UILabel 获取值。就我而言,必须初始化所有关系和 GUI 项,并且必须在调用 awake 方法之前分配值。不幸的是,我无法通过应用来获取值并禁用按钮

- (void)awakeFromNib 
     decreaseButton.enabled = NO;
     decreaseButton.alpha = 0.2;
     [polygon initWithNumberOfSides:numberOfSidesLabel.text.integerValue     
               minimumNumberOfSides:3
               maximumNumberOfSides:12]; 

到我的课程。我已经建立了 UILabel 和

之间的连接
IBOutlet UILabel *numberOfSidesLabel;

在我创建的类文件中。 有人可以看到错误还是我应该提供有关该问题的更多信息?

【问题讨论】:

-awakeFromNib 被调用时,decreaseButtonnumberOfSidesLabel 是否为零? 标签在UI中的初始值为“3”,但当唤醒时该值为0。按钮与动作的关系:增加和减少。 值是 0,还是只是因为您在 nil 对象上调用方法而看起来为零? NSLog(@"%i",numberOfSidesLabel.text.integerValue);返回 0 关于 Objective-C 与其他语言不同的重要一点是,在设置为 nil 的变量上调用方法是完全合法的。粗略地说,所有此类方法调用都返回 0 或 nil。因此,重要的是要知道 numberOfSidesLabel 本身是否为 nil,或者它是否实际上是一个实例化的 UILabel 对象,其标签文本的计算结果为 0。添加类似:NSLog(@"%@", numberOfSidesLabel); 或使用调试器进行检查。 【参考方案1】:

首先,您必须在覆盖此方法时调用[super awakeFromNib];

其次,标准做法是使用viewDidLoad。试试吧。

【讨论】:

感谢您的回复。我试图打电话给 UILabel : NSLog(@"%i",numberOfSidesLabel.text.integerValue);在 viewDidLoad 但结果 = 0;加载所有内容后,我可以从标签中获取值并进一步传递它,但在编译时没有问题。 那么有什么问题。您在运行时需要它,而不是编译时。问题是转换为整数吗? 我需要在应用程序启动之前进行一些设置(禁用按钮并获取 UILabel 的值)。我无法完成这两项任务,也无法确定我错在哪里。 您不应该在启动时从UI 元素 中获取任何!如果您需要在应用程序启动时保留一个值,请使用NSUserDefaults。在您配置视图之前填充您的 UI(例如标签)。 那是我错了,谢谢你的帮助。我明白了,看看我现在哪里错了。

以上是关于awakeFromNib 无法从 UILabel 获取值,也无法禁用 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

awakeFromNib 中的变量为零

从主 ViewController 中的 xib 文件调用 awakeFromNib

运用Runtime全局修改UILabel的默认字体

无法从另一个视图控制器更改 UILabel.text,UILabel 得到 nil 值

无法从 UILabel 切换到 ViewController

如何获得从 awakeFromNib 到 mainViewController.m 的对象高度?