iphone - UIView子类默认属性

标签 iphone cocoa-touch uiview

为 UIView 子类的属性设置默认值的正确方法是什么?

虽然我还没有使用它们,但如果 XIB 提供了一个值,我希望它能够覆盖默认值。但如果 XIB 未提供值,我需要默认值。

在本例中,我专门考虑了 CGFloat 值。虽然它可以设置为 0.0,但这不是一个有用的默认值,因此我宁愿避免在代码中检查 0.0 值并将其替换为更好的值。

最佳答案

在您的子类中实现 initWithFrame: 并在那里设置属性。

- (id)initWithFrame:(CGRect)aRect {
    if (self = [super initWithFrame:aRect]) {
        // Set whatever properties you want.  For example...
        self.alpha = 0.75;
    }
    return self;
}

只有在代码中构造 View 时,此指定的初始值设定项才会执行。如果 View 来自 nib 文件,它将使用 initWithCoder: 进行初始化,这会修改属性以匹配 nib 文件中的属性。要处理这种情况,您可以重写 initWithCoder:,测试该属性是否设置为其默认值,如果是,则更改它:

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super initWithCoder:decoder]) {
        if (self.alpha == 1.0) {
            self.alpha = 0.20;
        }
    }
    return self;
}

关于iphone - UIView子类默认属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467361/

相关文章:

iphone - 如何检查 iPhone 钥匙串(keychain)中是否存储了某些内容?

iphone - openEars 项目错误和警告

iphone - uilabel 或 uitextview 中的超文本

iphone - 从 URI 获取音频流并在 iPhone 上播放

ios - 如何将顶部约束设置为屏幕高度的 20%?

objective-c - 在 UITextField 上显示过去的条目

objective-c - 检查正在使用的应用程序版本

ios - UIView Gradient 使用 CAGradientLayer 总是蓝色

ios - 以编程方式访问 Interface Builder 中添加的 UIView 的 subview

c++ - 连续捕获 UIView 到纹理