如何在ViewController中添加一个简单的按钮?

时间:2015-08-05 11:22:45

标签: ios swift uibutton optional

我有以下代码。

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?

这是正确的方法吗?

4 个答案:

答案 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
    ...

这样就不需要将属性声明为可选类型。