如何在 Swift 4 中以编程方式接收来自 UIButton 的输入?



我是Swift新手。我设法构建了一个几乎可以工作的应用程序,但我无法正确完成最后的步骤。我将不胜感激任何帮助!

我编写了一个代码,显示用户定义的UILabel数。在这些标签中,将显示[String]的内容。在标签下,有相同数量的UITextField。用户应填写这些文本字段,按下按钮,然后查看他填写的内容是否与标签匹配。

所有标签、文本字段和按钮都是完全以编程方式制作的,因此无需使用情节提要。在viewDidLoad中有所有代码和这一行:

myButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)

就在viewDidLoad下面,我在这个论坛上找到了这个功能,我对其进行了一点更改:

@objc func buttonAction(sender: UIButton!) -> [String] {
var a = 0
var userInput: [String] = Array()
while a < 4 {
if let myTextField = self.view.viewWithTag(a) as? UITextField {
let tekstInput = myTextField.text
userInput.insert(tekstInput!, at:a-1)
}
a = a + 1
}
return userInput
}

我的问题:

函数中的while循环不应将最大值设置为 4,而应为用户定义的变量。但是,如果我尝试更改函数以使它期望该变量作为输入,则会在myButton.addTarget行中收到错误消息。

如何在 viewdidload 中读出返回以添加代码以将用户输入与原始[String]进行比较?

如果要回答问题,应考虑用户定义输入的来源。

例如,如果您愿意添加一个额外的UITextField来检索用户输入,那么您所要做的就是从buttonAction(sender:)方法中的该文本字段中提取值并在那里使用它。这大致转化为以下内容

@objc func buttonAction(_ sender: UIButton) {
var a = 0
var userInput: [String] = Array()
guard let upperLimit = self.userInputTextField.text as? Int else {
return
}
while a < upperLimit {
if let myTextField = self.view.viewWithTag(a) as? UITextField {
let tekstInput = myTextField.text
userInput.insert(tekstInput!, at: a-1)
}
a = a + 1
}
}

请注意,self.userInputTextField是您应该添加的额外文本字段,以便检索用户定义的输入。

最新更新