【问题标题】:How can i change the State of a checkbox in swift without clicking it?如何在不单击的情况下快速更改复选框的状态?
【发布时间】:2016-11-06 10:24:52
【问题描述】:

例如,我有两个复选框,我的目标是如果复选框 1 被选中,那么复选框 2 也被选中。如果未选中复选框 1,则复选框 2 也未选中。如何在不单击的情况下更改复选框的状态?

【问题讨论】:

    标签: swift macos checkbox state nsbutton


    【解决方案1】:

    像这样将你的复选框与视图控制器连接起来:

    class ViewController: UIViewController {
    
      @IBOutlet weak var checkBox1: UISwitch!      
      @IBOutlet weak var checkBox2: UISwitch!
    
    }
    

    然后将您的第一个复选框的 IBAction 添加到视图控制器,并使用 if else 切换第二个复选框,如下所示:

    class ViewController: UIViewController {
    
      @IBOutlet weak var checkBox1: UISwitch!
      @IBOutlet weak var checkBox2: UISwitch!
    
      @IBAction func checkBox1Pressed(_ sender: UISwitch) {
        // using if else
        if checkBox1.isOn {
          checkBox2.setOn(true, animated: true)
        } else {
          checkBox2.setOn(false, animated: true)
        }
      }
    }
    

    或使用三元运算符,如下所示:

    class ViewController: UIViewController {
    
      @IBOutlet weak var checkBox1: UISwitch!
      @IBOutlet weak var checkBox2: UISwitch!
    
      @IBAction func checkBox1Pressed(_ sender: UISwitch) {
        // or using ternary operator
        checkBox1.isOn ? checkBox2.setOn(true, animated: true) : checkBox2.setOn(false, animated: true)
      }
    }
    

    结果:

    如果您不使用 UISwitch,请使用您当前的代码更新您的问题

    由于 OP 的评论而更新:

    像这样将你的复选框与视图控制器连接起来:

    class ViewController: NSViewController {
      @IBOutlet weak var checkBox1: NSButton!
      @IBOutlet weak var checkBox2: NSButton!
    } 
    

    然后将您的第一个复选框的 IBAction 添加到视图控制器,并使用 if else 切换第二个复选框,如下所示:

    class ViewController: NSViewController {
      @IBOutlet weak var checkBox1: NSButton!
      @IBOutlet weak var checkBox2: NSButton!
    
    
      @IBAction func checkBox1Pressed(_ sender: NSButton) {
        // Note: state checked == 1, state unchecked == 0
    
        // if checkBox1 is checked
        if checkBox1.state == 1 {
          // also set checkBox2 on checked state
          checkBox2.state = 1
        } else {
          // uncheck checkBox2
          checkBox2.state = 0
        }
      }
    }
    

    或使用三元运算符,如下所示:

    class ViewController: NSViewController {
      @IBOutlet weak var checkBox1: NSButton!
      @IBOutlet weak var checkBox2: NSButton!
    
    
      @IBAction func checkBox1Pressed(_ sender: NSButton) {
        // Note: state checked == 1, state unchecked == 0
    
        // or using ternary operator
        checkBox1.state == 1 ? (checkBox2.state = 1) : (checkBox2.state = 0)
      }
    }
    

    结果:

    【讨论】:

    • 感谢您的快速答复。我必须更具体地写下我的问题。您的回答帮助了我,但我需要知道它在带有标准复选框的 mac 程序上是如何工作的,如果选中,它会在其中打一个复选标记。我不使用 UISwitch。我只能在 NSButton 和 Any 对象之间进行选择。
    • 更新了我的答案@Feindpak
    【解决方案2】:

    UISwitch 类中有一个方法:

    func setOn(Bool, animated: Bool)
    

    例子:

    yourSwitch.setOn(true, animated: true)
    

    为了将两个开关相互链接,您必须编写一些更复杂的东西。如果您在情节提要中创建视图,代码将如下所示。

    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var firstSwitch: UISwitch!
        @IBOutlet weak var secondSwitch: UISwitch!
    
        @IBAction func firstValueChanged() {
            secondSwitch.setOn(firstSwitch.isOn, animated: true)
        }
    
        @IBAction func secondValueChanged() {
            firstSwitch.setOn(secondSwitch.isOn, animated: true)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多