使用类

时间:2016-11-06 13:32:41

标签: ios swift swift3

我是Swift的新手,我认为这是iOS编程的基本问题。

我的故事板中有三个按钮,如果按一次,两次和三次,我想自定义这些按钮的外观。

我还有三个主题(粉色,蓝色和橙色)。我想做的是创建三个名为pink,blue和orange.swift

的新类

我不想以编程方式创建它们,只是以编程方式设置它们。

我缺乏理解的是如何将我的 pink.swift 类中的函数(示例:“ButtonIsPressed”)调用到我的@IBAction和@IBOutlet中主视图控制器也是面向对象(即我不想为每个按钮创建一个函数)?

我无法找到一份体面的,最新的Swift 3教程,我们将非常感谢您对此主题的任何帮助或建议。

为什么不能这么简单?:

@IBAction func buttonPressed(_ sender: UIButton!) {
    self.backgroundColor = myPinkCGolor
}

2 个答案:

答案 0 :(得分:1)

我认为shallowThought的答案可以根据具体命名的IBOutlet的按钮状态更改backgroundColor。

  

我的故事板中有三个按钮,如果按一次,两次和三次,我想自定义这些按钮的外观。

如果您想维持“状态”,就像点击或点击按钮的次数有“计数器”一样,您可以使用按钮的“标记”属性。将其设置为零,并在IBAction函数中递增它。 (就像shallowThought所说,使用.touchUpInside和.touchDown来表示事件。)

另外,你有一个未成年人 - 但很重要! - 你的代码Brewski错误了:

@IBAction func buttonPressed(_ sender: UIButton!) {
    self.backgroundColor = myPinkCGolor
}

应该是:

@IBAction func buttonPressed(_ sender: UIButton!) {
    sender.backgroundColor = myPinkCGolor
}

所以将所有内容组合起来 - 对shallowThought进行投票(同样,将他的AnyObject更改为UIButton并在UIColors上使用Swift 3.x语法 - 并最终得到此结果。请注意,不需要IBOutlet,而且你可以在没有子类化的情况下在IB中连接所有内容:

// .touchUpInside event

// can be adapted to show different color if you want, but is coded to  always show white color

@IBAction func buttonClicked(sender: UIButton) {
    sender.backgroundColor = UIColor.whiteColor()
}

// .touchDown event

// will show a different color based on tap counter

@IBAction func buttonReleased(sender: UIButton) {
    switch sender.tag {
    case 1:
        sender.backgroundColor = UIColor.blue
    case 2:
        sender.backgroundColor = UIColor.red
    case 3:
        sender.backgroundColor = UIColor.green
    default:
        sender.backgroundColor = UIColor.yellow
    }
    sender.tag += 1
}

答案 1 :(得分:0)

没有方法可以将backgroundColor设置为某个状态,就像其他UIButton属性一样,所以你必须听按钮操作:

class ViewController: UIViewController {

    @IBOutlet weak var button: UIButton!

    @IBAction func buttonClicked(sender: AnyObject) { //Touch Up Inside action
        button.backgroundColor = UIColor.whiteColor()
    }

    @IBAction func buttonReleased(sender: AnyObject) { //Touch Down action
        button.backgroundColor = UIColor.blueColor()

    }
    ...
}

或使用image:UIImage, forState:.selected设置单色图像。