我是Swift的新手,我认为这是iOS编程的基本问题。
我的故事板中有三个按钮,如果按一次,两次和三次,我想自定义这些按钮的外观。
我还有三个主题(粉色,蓝色和橙色)。我想做的是创建三个名为pink,blue和orange.swift
的新类我不想以编程方式创建它们,只是以编程方式设置它们。
我缺乏理解的是如何将我的 pink.swift 类中的函数(示例:“ButtonIsPressed”)调用到我的@IBAction和@IBOutlet中主视图控制器也是面向对象(即我不想为每个按钮创建一个函数)?
我无法找到一份体面的,最新的Swift 3教程,我们将非常感谢您对此主题的任何帮助或建议。
为什么不能这么简单?:
@IBAction func buttonPressed(_ sender: UIButton!) {
self.backgroundColor = myPinkCGolor
}
答案 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
设置单色图像。