尝试处理导航栏标题视图内的分段控制开关
Trying to handle segmented control switch inside of navigation bar title view
我使用
创建了一个分段控件
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
分段控件显示完全正常,但每当我 select 登录或注销时,select 或代码不会执行
@objc func handleSegmentedControlSwitch(_ segmentedControl: UISegmentedControl) {
switch(segmentedControl.selectedSegmentIndex) {
case 0:
print("Sign In")
break
case 1:
print("Sign Out")
break
default:
break
}
}
知道如何解决这个问题吗?
附件是工作分段控件的图像
这是因为你的 UISegmentControl 声明。
你有两种方法:
1。将其声明为 lazy var:
因为惰性变量中的 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
}
我使用
创建了一个分段控件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
分段控件显示完全正常,但每当我 select 登录或注销时,select 或代码不会执行
@objc func handleSegmentedControlSwitch(_ segmentedControl: UISegmentedControl) {
switch(segmentedControl.selectedSegmentIndex) {
case 0:
print("Sign In")
break
case 1:
print("Sign Out")
break
default:
break
}
}
知道如何解决这个问题吗?
附件是工作分段控件的图像
这是因为你的 UISegmentControl 声明。
你有两种方法:
1。将其声明为 lazy var:
因为惰性变量中的 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
}