繁体   English   中英

以编程方式打开/关闭 UISwitch iOS

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM