当我想在视图控制器的视图中添加一个 UIButton 时,有以下几种方法:
第一种
我的问题是应该使用哪种方式或哪种方式更好?
ViewController.swift:24:26: Cannot convert value of type 'NSObject -> () -> ViewController' to expected argument type 'AnyObject?'
所以我必须将这一行(带有self的任何行)放在这个闭包之外。有什么办法可以解决吗?
总之,哪种方式更好或更适合?或者有更好的方法吗?谢谢!
编辑:
当我使用Objective C时,我喜欢以这种方式使用getter
因此,我的
let button: UIButton = UIButton()
然后在viewDidLoad
方法中配置属性。
第二步
lazy var button: UIButton = {
let buttonTemp = UIButton()
buttonTemp.backgroundColor = UIColor.clearColor()
button.addTarget(self, action: "connect", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(buttonTemp)
return buttonTemp
}()
第三步
let button: UIButton = {
let button = UIButton(type: .Custom)
button.backgroundColor = UIColor.greenColor()
return button
}()
我的问题是应该使用哪种方式或哪种方式更好?
- 我不喜欢第一种方式,因为我必须添加一个额外的方法来配置其他属性。
- 第二种对我来说还可以,我只需要在需要的任何地方调用按钮。
- 我认为使用let是最适合的,所以我使用了第三种方式,但问题是我不能调用self,也就是如果我在闭包中添加这个链接:
button.addTarget(self, action: "connect", forControlEvents: UIControlEvents.TouchUpInside)
ViewController.swift:24:26: Cannot convert value of type 'NSObject -> () -> ViewController' to expected argument type 'AnyObject?'
所以我必须将这一行(带有self的任何行)放在这个闭包之外。有什么办法可以解决吗?
总之,哪种方式更好或更适合?或者有更好的方法吗?谢谢!
编辑:
当我使用Objective C时,我喜欢以这种方式使用getter
- (UIButton *) button {
if (!_button) {
_button = [[UIButton alloc] init];
_button.backgroundColor = [UIColor redColor];
...
}
return _button;
}
因此,我的
viewDidLoad
将会变得简洁并且看起来很好:- (void) viewDidLoad {
...
[self.view addSubview:self.button];
...
}