如何在 Swift 中使用 UIKit 注册多个按钮点击?
Posted
技术标签:
【中文标题】如何在 Swift 中使用 UIKit 注册多个按钮点击?【英文标题】:How to register more than one button tap using UIKit in Swift? 【发布时间】:2016-03-29 18:29:20 【问题描述】:我正在尝试使用按钮,但遇到了一个可能很简单的问题。我有两个按钮和两个标签。
标签生成随机字符串值“A”或“B”。如果选择了适当的按钮,我希望正确的标签消失。
我想出了以下代码,但遇到了问题。如果字母相同,则点击相应按钮时两个标签都将隐藏。
我想我理解为什么会这样。这是因为我的代码在按钮A被点击一次时执行(我还没有开始按钮B,所以它没有做任何事情。)
所以我的问题是我如何需要 2 个水龙头?换句话说,如果 label_1 和 label_2 都显示为字符串“A”,我将如何要求用户点击 buttonA 两次?如果需要更多代码,请在 cmets 中告诉我。
@IBOutlet weak var label_1: UILabel!
@IBOutlet weak var label_2: UILabel!
@IBOutlet weak var label_3: UILabel!
@IBOutlet weak var label_4: UILabel!
@IBOutlet weak var label_5: UILabel!
var visibleLetters = ["A", "B", "Z", "X"]
var text = "", text2 = "", text3 = "", text4 = "", text5 = ""
let aButton = "A", bButton = "B", zButton = "Z", xButton = "X"
var x = 0
override func viewDidLoad()
super.viewDidLoad()
createRandomLetter(text, aSecondLetter: text2, aThirdLetter: text3, aFourthLetter: text4, aFifthLetter: text5)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
@IBAction func buttonA(sender: UIButton)
if aButton == label_1.text
label_1.hidden = true
label_1.tag += 1
else
//play animation
print("play animation")
@IBAction func buttonB(sender: UIButton)
if bButton == label_1.text
label_1.hidden = true
@IBAction func buttonX(sender: UIButton)
if xButton == label_1.text
label_1.hidden = true
@IBAction func buttonZ(sender: UIButton)
if zButton == label_1.text
label_1.hidden = true
func createRandomLetter(individualLetter: String, aSecondLetter: String, aThirdLetter: String, aFourthLetter: String, aFifthLetter: String)
let individuaLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))],
aSecondLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))],
aThirdLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))],
aFourthLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))],
aFifthLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))]
label_1.text = individuaLetter
label_2.text = aSecondLetter
label_3.text = aThirdLetter
label_4.text = aFourthLetter
label_5.text = aFifthLetter
func isCorrect()
if aButton == label_1.text
label_1.hidden = true
label_1.tag += 1
else if label_1.tag == 1 && aButton == label_2.text
else
//play animation
print("play animation")
【问题讨论】:
我不确定你想做什么。能详细点吗? label1 是否绑定到 buttonA 而 label2 绑定到 buttonB?你能解释一下点击两次的必要性吗? 我会尽力解释我想要什么。我有一组随机的字母和一组不变的按钮。按钮总是 A、B、X、Z(我很遗憾这么快就添加了额外的按钮),所以我要假装我没有添加 X 和 Z。所以我有 2 个随机显示 A 或 B 的标签. 如果 label_1 显示 A,用户必须按 A,如果 label_1 显示 B,则用户必须按 A。如果用户按下正确的按钮,那么他对 label_2 执行相同操作。 @ryantxr 也许多次点击具有误导性。我要检查的是相应的按钮和标签是否匹配。例如,buttonA 和 label_1,基本上用 label_2 重复按钮 A 或 B 的过程... 【参考方案1】:好吧,试着弄清楚你想要做什么让我们举个例子。因此,您有 4 个标签和 2 个按钮(A,B),当您单击按钮时,标签具有随机生成的 A,B 值,您需要检查该按钮是否具有与标签相同的文本,如果正确,我们如果不正确,请对 label2 执行相同操作,我们会继续尝试。
执行此操作的一种合乎逻辑的方法是将标签与您的标签相关联(我认为您已经这样做了)并有一个时间变量来跟踪当前标签,例如
var temporal:String!
var current_tag:Int = 1
override func viewDidLoad()
super.viewDidLoad()
createRandomLetter(text, aSecondLetter: text2,
aThirdLetter: text3, aFourthLetter: text4, aFifthLetter: text5)
temporal = label1.text
@IBAction func buttonZ(sender: UIButton)
//Answer is correct
if zButton == temporal
current_tag++
IsCorrect(current_tag)
func Iscorrect(tag:Int)
if(label2.tag == tag)
temporal = label2.text
else if(label3.tag == tag)
temporal = label2.text
else if(label4.tag == tag)
temporal = label2.text
这样的东西应该可以工作,我没有尝试过,因为我是从我的 Ipad 上回答的,而且我无法使用我的笔记本电脑,但是这样的东西应该完全可以工作,任何疑问我都可以帮助你 XD
【讨论】:
是的!这正是我想要做的!现在我试图理解它为什么起作用。此外,我收到此错误:致命错误:在展开可选值时意外发现 nil。我想我收到错误是因为 label2.tag 与 current_tag 不匹配,但它们似乎匹配,所以我试图弄清楚为什么 temporal 没有值。 当我们尝试比较尚未分配的变量时,一定会发生错误,这就是为什么在视图 didload 方法中我初始化了 temporal 尝试在之前初始化为类似 var temporal:String = ""我会在几个小时后在家尝试一下,如果答案帮助您将其标记为正确XD 我错过了您在 viewDidLoad 中分配的变量。在研究了一段时间之后,我想我对正在发生的事情有了基本的了解。感谢您的帮助。 有任何疑问,我们在这里寻求帮助 XD以上是关于如何在 Swift 中使用 UIKit 注册多个按钮点击?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 UIKit 在 Swift 5 中立即强制更新我的 UI?
如何使用 iOS Swift SKOverlay 和 UIKit 来交叉推广另一个应用程序?
如何在没有任何第三方库的情况下使用 UIKit 在 iOS 应用程序中使用 Swift 5 中的 GIF?
Swift:将 SwiftUI 元素添加到 UIKit 项目:无法正确应用约束