【问题标题】:Turn On/Off UISwitch Programmatically iOS以编程方式打开/关闭 UISwitch iOS
【发布时间】:2020-02-09 23:22:47
【问题描述】:

我在 UITableviewCell 中嵌入了一个 UISwitch。 tableview 使用动态原型单元格。以下代码控制选择时的切换操作。它工作得很好,可以打开和关闭开关并运行代码。但是,当我以编程方式调用按钮操作时,它会运行代码,但不会将所选位置从关闭更改为打开,反之亦然。为什么不显示开关的开/关变化?

// 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];
    }
}

【问题讨论】:

    标签: ios objective-c xcode uiswitch


    【解决方案1】:

    为您的 UISwitch 创建 IBOutlet 并在您以编程方式调用操作时将其用作发送者,或者您可以在触发操作时自己执行,只需手动更改更改 UISwitch 选定状态,

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      action方法响应switch状态的变化,但是自己调用action方法不会改变switch状态。

      您需要设置开关的isOn 属性来打开或关闭它。

      【讨论】:

        【解决方案3】:

        UISwitch 子类UIControl。使用 Interface Builder,您有效地为 UIEvent.valueChanged 事件添加了一个名为 didHideFlags(_:) 的操作方法,其目标等于实现 didHideFlags(_:) 函数的任何实例:

        switch.addTarget(<myTarget>, action: #selector(didHideFlags(_:)), for controlEvents: .valueChanged)
        

        来自UIControl 文档 (The Target-Action Mechanism):

        控件使用目标-动作机制来报告代码中发生的有趣事件。目标动作机制简化了您为在应用程序中使用控件而编写的代码。您无需编写代码来跟踪触摸事件,而是编写操作方法来响应特定于控件的事件。例如,您可以编写一个动作方法来响应滑块值的变化。该控件处理跟踪传入触摸事件和确定何时调用您的方法的所有工作。

        操作方法不负责导致UIControl 的标准行为,例如UISwitch 切换打开或关闭。相反,动作方法实现了响应事件而发生的副作用。

        As Paulw11 suggests,以编程方式打开或关闭UISwitch,改变其isOn 属性或调用其setOn(_:animated:) 方法:

        switch.isOn = false
        

        switch.setOn(false, animated: true)
        

        【讨论】:

          猜你喜欢
          • 2012-03-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-09
          • 2013-12-05
          相关资源
          最近更新 更多