我正在使用UIKit
创建一个文字游戏,我想为用户代表整个字母表以解决难题,这是我的代码:
var emptyPos = [0]
@IBOutlet var pos1: UILabel!
@IBOutlet var pos2: UILabel!
@IBOutlet var pos3: UILabel!
@IBOutlet var pos4: UILabel!
@IBAction func btnA(sender: UIButton) {
letters(sender)
}
@IBAction func btnB(sender: UIButton) {
letters(sender)
}
@IBAction func btnC(sender: UIButton) {
letters(sender)
}
@IBAction func btnD(sender: UIButton) {
letters(sender)
}
func moveLetter (pos: UILabel, btn: UIButton) {
UIView.animateWithDuration(0.5, animations: { () -> Void in
btn.center = pos.center
})
}
func letters (btn: UIButton) {
switch emptyPos.count {
case 1:
moveLetter(pos1, btn: btn)
emptyPos.append(0)
println(emptyPos)
case 2:
moveLetter(pos2, btn: btn)
emptyPos.append(0)
println(emptyPos)
case 3:
moveLetter(pos3, btn: btn)
emptyPos.append(0)
println(emptyPos)
case 4:
moveLetter(pos4, btn: btn)
emptyPos.append(0)
println(emptyPos)
default:
println("Error")
}
}
这个想法是用户必须在字母后点击一个字母将它们移向空标签并找出正确的单词,正如你所看到的那样,我将每个字母设为一个按钮,每个空白空间都是一个标签,但是想知道是否有比为每个字母创建26个按钮更好的方法。将所有按钮链接到单个函数将不起作用,因为我将不得不依赖sender.tag
我无法传递给我的函数以移动该字母。那么我应该继续我正在做的事情还是有更好的方法来做到这一点?
答案 0 :(得分:1)
如果您创建自定义UIButton,您可以为按钮添加额外的属性,然后将@IBAction的发件人更改为您的自定义类,然后只需将按钮传递给您的moveLetter,它就可以根据信息知道该做什么由按钮提供。那么他们都可以共享相同的按键功能
然后,如果你的按钮子类有一个名为ButtonLetter的@property字符串,你可以在故事板中定义它的值是什么,而不是在代码中为所有按钮手动执行它,就像在屏幕截图中给它一样运行时属性以下
或者你可能是懒惰的,只是得到按钮的文本并阅读它是什么字母,但我会说这是一个更合适的方式,因为这可以适用于任何类型的按钮,也许按钮上的文本实际上是按下按钮时要用来进行某些计算的值,但在你的情况下恰好就是这样。