我有以下代码。
import UIKit
class ViewController: UIViewController {
var button : UIButton?
override func viewDidLoad() {
super.viewDidLoad()
button = UIButton.buttonWithType(UIButtonType.System) as UIButton?
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我收到以下错误
错误:
'AnyObject' is not convertible to 'UIButton?'
我知道我可能会做一些根本错误的事情。我想知道那是什么。
据我说: 我已将按钮声明为可选UIButton - 我认为这意味着按钮的值可以取消设置或为零
因此, 在初始化时,类型被提到作为UIButton?
这是正确的方法吗?
答案 0 :(得分:2)
您无法按照自己的方式转换为可选的UIButton。强制转换为可选UIButton的正确方法是:
button = UIButton.buttonWithType(UIButtonType.System) as? UIButton
解释为:此强制转换可以返回nil或UIButton对象,从而产生可选的UIButton对象。
答案 1 :(得分:1)
请尝试以下代码:
var button = UIButton(frame: CGRectMake(150, 240, 75, 30))
button.setTitle("Next", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonTapAction:", forControlEvents: UIControlEvents.TouchUpInside)
button.backgroundColor = UIColor.greenColor()
self.view.addSubview(button)
答案 2 :(得分:1)
按照以下代码
var myBtn = UIButton.buttonWithType(UIButtonType.System) as UIButton
//OR
var myBtn = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
//OR
var myBtn = UIButton()
myBtn.setTitle("Add Button To View Controller", forState: .Normal)
myBtn.setTitleColor(UIColor.greenColor(), forState: .Normal)
myBtn.frame = CGRectMake(30, 100, 200, 400)
myBtn.addTarget(self, action: "actionPress:", forControlEvents: .TouchUpInside)
self.view.addSubview(myBtn)
//Button Action
func actionPress(sender: UIButton!)
{
NSLog("When click the button, the button is %@", sender.tag)
}
答案 3 :(得分:0)
此代码应该可以胜任。
button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
在这种情况下,使用force cast
完成的!
是一个安全的选项,因为文档确保该方法返回UIButton
。
您还可以在声明属性期间创建按钮:
class ViewController: UIViewController {
var button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
...
这样就不需要将属性声明为可选类型。