Ios UISwitch值更改状态问题
我在我的应用程序中使用了Ios UISwitch值更改状态问题,ios,swift,uiswitch,Ios,Swift,Uiswitch,我在我的应用程序中使用了UISwitch,其valueChanged目标如下代码所示。 此开关位于myUITableView settingsTableCell.androidSwitchSmall.addTarget(self, action: #selector(switchStateChanged(_:)), for: .valueChanged) @objc func switchStateChanged(_ mjSwitch: MJMaterialSwitch) { if
UISwitch
,其valueChanged
目标如下代码所示。
此开关位于myUITableView
settingsTableCell.androidSwitchSmall.addTarget(self, action: #selector(switchStateChanged(_:)), for: .valueChanged)
@objc func switchStateChanged(_ mjSwitch: MJMaterialSwitch) {
if self.lastSwitchState == mjSwitch.isOn {
return
}
self.lastSwitchState = mjSwitch.isOn
print(mjSwitch.isOn, mjSwitch.tag, "Small")
self.changeTrackStatus()
}
我正在改变目标方法中开关的值。因此,它再次调用switchStateChanged
方法
但我只想在用户更改开关状态时调用switchStateChanged
此方法
最好的办法是什么
如何区分用户是否更改了开关状态或开关状态是以编程方式更改的。按照以下步骤操作
第1步
在选项卡视图单元格中创建一个变量
var Btn1 : (()->())?
步骤2
在选项卡elviewcell
中创建ui按钮的操作,并调用上面的变量
@IBAction func cellbtn(_ sender: UIButton) {
Btn1?()
}
步骤3
在视图控制器中声明Bool
变量和函数
var IsSwitchOn = false
func switchStateChanged(_ mjSwitch: MJMaterialSwitch) {
if self.IsSwitchOn {
return
}
self.IsSwitchOn = True
print(mjSwitch.isOn, mjSwitch.tag, "Small")
self.changeTrackStatus()
}
步骤4
在cellForRowAt indepath
中调用此函数
let cell = tableView.dequeueReusableCell(withIdentifier: "CellID") as! YourCell
cell.Btn1 = {
() in
Self.switchStateChanged()
}
希望这能奏效 按照以下步骤操作
第1步
在选项卡视图单元格中创建一个变量
var Btn1 : (()->())?
步骤2
在选项卡elviewcell
中创建ui按钮的操作,并调用上面的变量
@IBAction func cellbtn(_ sender: UIButton) {
Btn1?()
}
步骤3
在视图控制器中声明Bool
变量和函数
var IsSwitchOn = false
func switchStateChanged(_ mjSwitch: MJMaterialSwitch) {
if self.IsSwitchOn {
return
}
self.IsSwitchOn = True
print(mjSwitch.isOn, mjSwitch.tag, "Small")
self.changeTrackStatus()
}
步骤4
在cellForRowAt indepath
中调用此函数
let cell = tableView.dequeueReusableCell(withIdentifier: "CellID") as! YourCell
cell.Btn1 = {
() in
Self.switchStateChanged()
}
希望这能奏效 您必须以编程方式发送操作,
您可以使用以下扩展
extension UISwitch {
func set(on state: Bool, animated: Bool = true) {
setOn(state, animated: animated)
sendActions(for: .valueChanged)
}
}
您必须以编程方式发送操作,
您可以使用以下扩展
extension UISwitch {
func set(on state: Bool, animated: Bool = true) {
setOn(state, animated: animated)
sendActions(for: .valueChanged)
}
}
你为什么不在里面用触碰呢。这将仅在用户与开关交互时触发选择器
settingsTableCell.androidSwitchSmall.addTarget(self, action: #selector(switchStateChanged(_:)), for: .touchUpInside)
你为什么不在里面用触碰呢。这将仅在用户与开关交互时触发选择器
settingsTableCell.androidSwitchSmall.addTarget(self, action: #selector(switchStateChanged(_:)), for: .touchUpInside)
UISwitch.setOn(mjSwitch)(真,动画:假)
UISwitch.setOn(mjSwitch)(真,动画:假)