swift - 如何在不通过选择器 Swift 的情况下将参数传递给方法?

标签 swift function methods

我有一个 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/

相关文章:

ios - 为什么我们仍然在 swift ios 应用程序中使用 NSDictionary 和 NSArrays?

c++ - 数组在返回时丢失值(库存/菜单程序)C++

javascript - 如果数字是 JavaScript 中的质数,则获取 bool 值

javascript - 简单的 javascript AJAX 发布功能不起作用

Javascript,对象原型(prototype) - 避免编写完整路径

ios - NSUserDefaults 似乎没有创建全局可访问的变量

swift - 在 swift 中使用 NSPropertyListSerialization.propertyListWithData

iphone - 从另一个 ViewController 调用方法

ios - 使用动态原型(prototype)单元在 segue 上将 CloudKit 记录从 TableViewController A 传递到 TableViewControllerB

javascript - 如何同时从同一个构造函数调用所有对象?