在Objective-C中以编程方式创建UIViews并将其放在闭包中

时间:2017-03-07 18:50:09

标签: ios objective-c swift uiview closures

在Swift中我会这样做以在一种闭包中创建一个UIView(我认为这是一个闭包),我怎样才能在Objective-C中做同样的事情呢? 我不想在ViewDidLoad()中设置所有变量和类似的东西。 谢谢你的帮助。

let myView: UIView = {
    let view = UIView()
    view.layer.masksToBounds = true
    view.layer.cornerRadius = 5
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

2 个答案:

答案 0 :(得分:4)

如果不在initviewDidLoad中进行,则距离最近的是懒惰的实例化。

@interface SomeClass: NSObject
@property (nonatomic, strong) UIView *myView;
@end 

@implementation SomeClass

- (UIView *)myView
{
    if (!_myView) {
        _myView = [[UIView alloc] init];
        _myView.layer.masksToBounds = YES;
        _myView.layer.cornerRadius = 5;
        _myView.translatesAutoresizingMaskIntoConstraints = NO;
    }

    return _myView;
}

@end

答案 1 :(得分:2)

您可以在Objective-C中创建几乎相同的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *myView = ^UIView*() {
        UIView *view = [[UIView alloc] initWithFrame: CGRectZero];
        view.layer.masksToBounds = TRUE;
        view.layer.cornerRadius = 5;
        view.translatesAutoresizingMaskIntoConstraints = FALSE;
        //Add constraints
        return view;
    }();
    [self.view addSubview: myView];
}

然而,这不会像在Swift中那样创建计算变量。它只是定义一个块并调用它以初始化本地变量。