Ios 更改SegmentedControl的索引时如何调用函数
当我的UISegmentedControl更改索引时,我试图调用一个函数“indexChanged”。我正在使用这个类中的.addAction函数。我收到这样的警告:“没有使用Objective-C选择器'indexChanged:'声明方法”,但即使在“indexChanged”函数旁边添加@objc标记,我也会收到更多错误 当SegementedControl索引更改时,是否有其他方法调用函数?部分代码如下:Ios 更改SegmentedControl的索引时如何调用函数,ios,swift,segmentedcontrol,Ios,Swift,Segmentedcontrol,当我的UISegmentedControl更改索引时,我试图调用一个函数“indexChanged”。我正在使用这个类中的.addAction函数。我收到这样的警告:“没有使用Objective-C选择器'indexChanged:'声明方法”,但即使在“indexChanged”函数旁边添加@objc标记,我也会收到更多错误 当SegementedControl索引更改时,是否有其他方法调用函数?部分代码如下: let items = ["Donors", "Ca
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")
}
}
非常感谢 你们很接近!您没有解释您得到的额外错误,但我通过更改两行代码成功编译了您的代码:
controller.addTarget(self, action: "indexChanged:", for: .valueChanged)
变成:
controller.addTarget(self, action: #selector(indexChanged(_:)) , for: .valueChanged)
及
需要@objc才能工作:
@objc
func indexChanged(_ sender: UISegmentedControl) {
谢谢你的回复。当我这样做时,我得到一个新的错误:“@obj只能用于类的成员、@objc协议和类的具体扩展”,这是真的。您的代码不是在UIViewController的子类中吗?这是UIKit代码。如果您试图编写SwiftUI代码,则不应使用UISegmentedControl,而应使用带有.pickerStyle(SegmentedPickerStyle())的选择器
@objc
func indexChanged(_ sender: UISegmentedControl) {