如何在不单击的情况下更改swift中的复选框状态?

时间:2016-11-06 10:24:52

标签: swift macos checkbox state nsbutton

例如,我有两个复选框,我的目标是检查复选框1是否也选中了复选框2。如果未选中复选框1,则也取消选中复选框2。如何更改复选框的状态而不单击它?

2 个答案:

答案 0 :(得分:5)

将您的复选框与视图控制器连接起来:

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)
  }
}

<强>结果:

enter image description here

如果您不使用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)
  }
}

<强>结果:

enter image description here

答案 1 :(得分:1)

UISwitch类中有一种方法:

func setOn(Bool, animated: Bool)

示例:

yourSwitch.setOn(true, animated: true)

为了将twi开关相互连接,你必须写一些更复杂的东西。如果您在故事板中创建视图,代码看起来就像这样。

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)
    }
}