[英]Turn On/Off UISwitch Programmatically iOS
我在 UITableviewCell 中嵌入了一个 UISwitch。 tableview 使用动态原型单元格。 以下代码控制选择时的开关动作。 它运行良好,打开和关闭开关并运行代码。 但是,当我以编程方式调用按钮操作时,它会运行代码但不会将所选位置从关闭更改为开启,反之亦然。 为什么它不显示开关 ON/OFF 变化?
// Call button programmatically
[self didHideFlags:self];
- (IBAction)didHideFlags:(id)sender{
_isOnFlag = !_isOnFlag;
if (_isOnFlag){
[self.flagOverlay.graphics removeAllObjects];
[self.flagTableView reloadData];
}else{
NSLog(@"Option 2");
[self updateMyFlagsWitAlert:NO];
}
}
为您的 UISwitch 创建 IBOutlet,当您以编程方式调用操作时,将其用作发送者,或者您可以在触发操作时自行完成,只需手动更改 UISwitch 选定状态,
希望这会有所帮助。
动作方法响应开关状态的变化,但自己调用动作方法不会改变开关状态。
您需要设置开关的isOn
属性来打开或关闭它。
UISwitch
UIControl
子类。 使用 Interface Builder,您已经有效地为UIEvent.valueChanged
事件添加了一个名为didHideFlags(_:)
的操作方法,其目标等于实现didHideFlags(_:)
函数的任何实例:
switch.addTarget(<myTarget>, action: #selector(didHideFlags(_:)), for controlEvents: .valueChanged)
来自UIControl
文档( 目标操作机制):
控件使用目标-动作机制来报告发生在您的代码中的有趣事件。 目标操作机制简化了您为在应用程序中使用控件而编写的代码。 您无需编写代码来跟踪触摸事件,而是编写操作方法来响应特定于控件的事件。 例如,您可以编写一个动作方法来响应滑块值的变化。 该控件处理跟踪传入触摸事件和确定何时调用您的方法的所有工作。
操作方法不负责导致UIControl
的标准行为,例如UISwitch
打开或关闭。 相反,动作方法实现了响应事件而发生的副作用。
正如 Paulw11 建议的那样,以编程方式打开或关闭UISwitch
,改变其isOn
属性或调用其setOn(_:animated:)
方法:
switch.isOn = false
或者
switch.setOn(false, animated: true)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.