用户界面 - 可以使用 getter 在 iOS 中配置 UIButtons 和 d UIViews



>我经常使用延迟加载来实例化自定义类、数组等。 模式通常为:

@property (strong, nonatomic) Class *class;
...
- (Class *)class
{
    if(!_class) _class = [[Class alloc]init];
    return _class;
}

是否可以使用相同的模式来配置 UI 元素? 例如,我不想在ViewWillAppear中格式化我所有的按钮和视图,而是想将格式放在getter中。 例如:

- (UIButton *)button
{
    if(!_button) {
        _button = [[UIButton alloc]init];
        self.button.backgroundColor = [UIColor redColor];
    }
    return _button;
}

问题是我正在使用故事板,XCode 实例化按钮,因此询问它是否为 nill 应该始终返回 false。 所以背景永远不会改变。 如果我删除 if-then,那么每次访问 getter 时都会设置背景,这可能没问题,但不是最佳的。

那么,如何使用 UI 元素的 getter 来配置元素呢?

如果这真的是你想要的方式,只需使用 BOOL 标志。例如:

@interface MyClass() {
    BOOL _hasCustomisedButton;
}
@property (strong, nonatomic) UIButton *button;
@end
@implementation MyClass

- (UIButton *)button {
    if (_hasCustomisedButton || _button == nil) {
        // check for nil button as well in case the nib isn't loaded yet
        return _button;
    }
    [_button setBackgroundColor:[UIColor redColor]];
    _hasCustomisedButton = YES;
    return _button;
}
@end

相关内容

  • 没有找到相关文章

最新更新