我正在使用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,这是我不能传递给我的函数,以移动字母。那么,我应该继续做我正在做的事情,还是有更好的方法来做到这一点?
发布于 2015-07-16 02:22:57
如果您创建了一个自定义UIButton,您可以向该按钮添加额外的属性,然后将@IBAction的发送方更改为您的自定义类,然后将该按钮传递给您的moveLetter,它可以根据该按钮提供的信息知道该做什么。然后它们都可以共享相同的按钮按下功能。


然后,如果您的按钮子类有一个名为ButtonLetter的@属性字符串,您可以在情节提要中定义它的值,而不是在所有按钮的代码中手动执行,方法是给它一个运行时属性,如下面的屏幕快照所示。

或者你可以懒得把按钮的文字读出来,但我会说这是一种更合适的方式,因为这可以适用于任何类型的按钮,也许按钮上的文本实际上不是你想要用来计算按钮的值,但在你的情况下,它恰好是那样的。
https://stackoverflow.com/questions/31444330
复制相似问题