1

当我的 UISegmentedControl 更改索引时,我试图调用一个函数“indexChanged”。我正在使用这个类中的 .addAction 函数。我收到此警告:“没有使用 Objective-C 选择器 'indexChanged:' 声明的方法”,但即使我在“indexChanged”函数旁边添加 @objc 标记,我也会收到更多错误。

当 SegementedControl 索引更改时,是否有另一种调用函数的方法?一些代码如下:

let items = ["Donors", "Cars"]
let controller = UISegmentedControl(items: items)
    controller.selectedSegmentIndex = 0

    let frame = UIScreen.main.bounds
    controller.frame = CGRect(x: frame.maxX - 135, y: frame.minY + 10,
                            width: frame.width - 250, height: frame.height*0.03)


    controller.addTarget(self, action: "indexChanged:", for: .valueChanged)
    
    
    map.addSubview(customSC) // map is a UIKit Map



func indexChanged(_ sender: UISegmentedControl) {
    if sender.selectedSegmentIndex == 0 {
        print("Select 0")
    } else if sender.selectedSegmentIndex == 1 {
        print("Select 1")
    }
}

非常感谢!

4

1 回答 1

1

你很亲近!您没有解释您遇到的额外错误,但我通过更改两行成功编译了您的代码:

  controller.addTarget(self, action: "indexChanged:", for: .valueChanged)

变成:

    controller.addTarget(self, action: #selector(indexChanged(_:)) , for: .valueChanged)

func indexChanged(_ sender: UISegmentedControl) {

需要@objc 才能工作:

@objc
func indexChanged(_ sender: UISegmentedControl) {
于 2020-11-20T23:37:20.253 回答