【问题标题】:IBInspectable property doesn't have its value in initWithCoder: initializerIBInspectable 属性在 initWithCoder 中没有它的值:初始化程序
【发布时间】:2016-12-11 16:03:23
【问题描述】:

我在 MyClass.h 文件中有这个:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface MyClass : UIView

@end

这是 .m 文件中的代码:

-(void)awakeFromNib{
    [super awakeFromNib];

    NSLog(@"This works %lud",(unsigned long)self.max);
}

-(instancetype)initWithCoder:(NSCoder *)aDecoder{

    if ((self = [super initWithCoder:aDecoder])){

        NSLog(@"This doesn't work %lud",(unsigned long)self.max);
    }

    return self;
}

在 awakeFromNib 方法中,我在 IB 中设置了正确的值。在 initWithCoder:我得到这个值等于零。

检查在 IB 中设置的该属性的值的合适时间是什么时候?

这就是我在 .m 文件中定义属性的方式:

@interface MyClass()

@property (nonatomic) IBInspectable NSUInteger max;

@end

【问题讨论】:

    标签: objective-c xcode uikit ibdesignable ibinspectable


    【解决方案1】:

    您似乎已经回答了自己的问题:awakeFromNib 而不是 initWithCoder:awakeFromNib 比较晚,到时候已经设置了运行时属性。

    当然,在现实生活中,您可能不会关心这个值,直到我们到达 viewDidLoad,这比 both 晚得多。

    【讨论】:

    • 谢谢。好吧,我还没有真正想出使用我的类最方便的方法,但想法是这样的:1)将视图拖到情节提要(并将其自定义类设置为 MyClass),2)输入值的可检查属性。同样基于这些属性,我在我的自定义视图中生成了一些额外的内容(它不是 IB 中定义的所有视觉内容)。因此,在我的视图初始化时,我需要在 IB 中定义的那些属性的值。如果您对此流程有任何建议或提示,我会全力以赴。 :)
    • 我的回答还是一样。正如您已经推断的那样,在awakeFromNib 中执行此操作。但我要做的是等到视图控制器得到viewDidLoad。这是在创建视图之后但在将其放入界面之前。视图控制器大概有一个对该视图的引用,因此它可以告诉它自己完成配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2020-03-05
    • 2021-08-09
    • 1970-01-01
    • 2014-11-14
    相关资源
    最近更新 更多