我创建了一个分段控件
private let updateSwitch: UISegmentedControl = {
let sc = UISegmentedControl(items: ["Sign In", "Sign Out"])
sc.anchor(width: 128, height: 32)
sc.selectedSegmentIndex = 0
sc.tintColor = .mainBlue
sc.backgroundColor = .mainGray
sc.addTarget(self, action: #selector(handleSegmentedControlSwitch(_:)), for: .valueChanged)
return sc
}()然后,我使用以下方法将updateSwitch添加到导航栏中
navigationItem.titleView = updateSwitch分段控件完全显示得很好,但是每当我选择登录或退出时,选择器代码就不会被执行。
@objc func handleSegmentedControlSwitch(_ segmentedControl: UISegmentedControl) {
switch(segmentedControl.selectedSegmentIndex) {
case 0:
print("Sign In")
break
case 1:
print("Sign Out")
break
default:
break
}
}知道我该怎么解决这个问题吗?
附件是工作分段控件的图像。

发布于 2020-04-13 18:56:00
这是因为您的UISegmentControl声明。
你有两种方法:
1.将其声明为惰性变量
因为懒惰变量中的Self是有效的。
private lazy var updateSwitch: UISegmentedControl = {
let sc = UISegmentedControl(items: ["Sign In", "Sign Out"])
sc.anchor(width: 128, height: 32)
sc.selectedSegmentIndex = 0
sc.tintColor = .mainBlue
sc.backgroundColor = .mainGray
sc.addTarget(self, action: #selector(handleSegmentedControlSwitch(_:)), for: .valueChanged)
return sc }()2.在viewDidLoad中分配操作
override func viewDidLoad() {
super.viewDidLoad()
let segmented = self.updateSwitch
segmented.addTarget(self, action: #selector(handleSegmentedControlSwitch(_:)), for: .valueChanged)
navigationItem.titleView = segmented
}https://stackoverflow.com/questions/61194413
复制相似问题