我有一个 Swift 应用程序,它在一个页面上有多个 UISegmentedControls,所有这些都有相同的目标,方法“answerClicked”。但是,我需要一种方法将信息传递给此方法,说明刚刚单击了哪个 UISegmentedControl。
我知道不能通过选择器传递参数——有没有办法获取此信息并将其传递给“answerClicked”方法?
class Flowchart{
//Init segmented controls up here...
segmentedControl0.addTarget(self, action: #selector(answerClicked), for: .valueChanged)
segmentedControl1.addTarget(self, action: #selector(answerClicked), for: .valueChanged)
segmentedControl2.addTarget(self, action: #selector(answerClicked), for: .valueChanged)
@objc func answerClicked(){
//Ideally would have an argument "segmentedControlNumber: Int"
//How else to tell 0, 1, and 2 apart?
}
}
最佳答案
为每个 UISegmentedControl
设置 tag
属性,然后使用作为值的第一个参数发送的 sender
更改获取标签
的方法:
class Flowchart {
//Init segmented controls up here...
func setup() {
segmentedControl1.addTarget(self, action: #selector(answerClicked), for: .valueChanged)
segmentedControl1.tag = 1
segmentedControl2.addTarget(self, action: #selector(answerClicked), for: .valueChanged)
segmentedControl2.tag = 2
segmentedControl3.addTarget(self, action: #selector(answerClicked), for: .valueChanged)
segmentedControl3.tag = 3
}
@objc func answerClicked(_ sender: UISegmentedControl) {
switch sender.tag {
case 1:
// code to handle segmentedControl1
case 2:
// code to handle segmentedControl2
case 3:
// code to handle segmentedControl3
default:
break
}
}
}
注意:正如@rmaddy 在评论中所述,最好避免使用标签 0
,因为默认情况下所有 View 都会收到标签值 0
。我重命名了您的分段控件,从 1
开始。
关于swift - 如何在不通过选择器 Swift 的情况下将参数传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194856/