按下其他连续按钮时如何取消选择按钮?
How can I deselect a button when other consecutive button is pressed?
我正在创建一个有 5 个按钮的测试,每个按钮对应一种特定的颜色,问题是当我 select 连续第二个按钮时,前一个按钮仍然是 select ed,我怎样才能使我的代码 select 一次只有一个按钮,而取消 select 前一个按钮?
我该如何解决这个问题?
这是我的代码
class ViewController: UIViewController {
var buttonPressed: Bool = false
@IBOutlet weak var button1: UIButton!
@IBAction func buttonAction1(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button1.setImage(UIImage(named: "Bolinha-5"), for: .normal)
}
else {
buttonPressed = true
button1.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button2: UIButton!
@IBAction func buttonAction2(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button2.setImage(UIImage(named: "Bolinha-5"), for: .normal)
}
else {
buttonPressed = true
button2.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button3: UIButton!
@IBAction func buttonAction3(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button3.setImage(UIImage(named: "Bolinha-2"), for: .normal)
}
else {
buttonPressed = true
button3.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button4: UIButton!
@IBAction func buttonAction4(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button4.setImage(UIImage(named: "Bolinha-3"), for: .normal)
}
else {
buttonPressed = true
button4.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button5: UIButton!
@IBAction func buttonAction5(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button5.setImage(UIImage(named: "Bolinha-3"), for: .normal)
}
else {
buttonPressed = true
button5.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
}
您要完成的工作称为 单选按钮,不幸的是 iOS(与 macOS 不同)不提供此功能。
我的建议是利用选项将不同的图像分配给 Interface Builder 中的不同状态——在本例中为 Default
和 Selected
状态——并创建一个插座集合,一个数组表示相同类型的 UI 个元素的序列。
建议不支持空 selection,默认第一个按钮是 selected。
在ViewController
创建出口集合
@IBOutlet var buttons : [UIButton]!
和一个IBAction
@IBAction func buttonAction(_ sender: UIButton) { }
在界面构建器中
- 将图像设置为属性检查器中每个按钮的
Default
和 Selected
状态。
- 按正确顺序将按钮连接到插座集合。
- 按相同顺序将标签 0 到 4 分配给按钮。
- 将所有按钮也连接到(相同的)IBAction。
在ViewController
为当前 selected 按钮的标签创建一个 属性
var selectedButton = 0
在viewDidLoad中select第一个按钮
override func viewDidLoad() {
super.viewDidLoad()
buttons[selectedButton].isSelected = true
}
完成 IBAction,它删除select上一个按钮和 select当前按钮。
@IBAction func buttonAction(_ sender: UIButton) {
let tag = sender.tag
buttons[selectedButton].isSelected = false
buttons[tag].isSelected = true
selectedButton = tag
}
假设您已将按钮命名如下:第一个按钮:“opt1Button”,第二个按钮:“opt2Button”,第三个按钮:“opt3Button”等等...
创建一个名为“optionSelected”的 IBAction 该函数如下所示:
@IBAction func optionSelected(_ sender: UIButton) {
opt1Button.isSelected = false
opt2Button.isSelected = false
opt3Button.isSelected = false
opt4Button.isSelected = false
opt5Button.isSelected = false
sender.isSelected = true
}
一旦选择了任何选项,所有按钮都会进入 'isSelected' 错误状态,即首先会取消选择所有按钮,并且选中的按钮将标记为已选中。选择任何按钮时,将再次执行相同的过程,所有内容都将取消选择,用户按下的按钮将被标记为已选择。
从 (https://developer.apple.com/forums/thread/685124) 找到了这个答案,它对我有用。
我正在创建一个有 5 个按钮的测试,每个按钮对应一种特定的颜色,问题是当我 select 连续第二个按钮时,前一个按钮仍然是 select ed,我怎样才能使我的代码 select 一次只有一个按钮,而取消 select 前一个按钮?
我该如何解决这个问题?
这是我的代码
class ViewController: UIViewController {
var buttonPressed: Bool = false
@IBOutlet weak var button1: UIButton!
@IBAction func buttonAction1(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button1.setImage(UIImage(named: "Bolinha-5"), for: .normal)
}
else {
buttonPressed = true
button1.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button2: UIButton!
@IBAction func buttonAction2(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button2.setImage(UIImage(named: "Bolinha-5"), for: .normal)
}
else {
buttonPressed = true
button2.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button3: UIButton!
@IBAction func buttonAction3(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button3.setImage(UIImage(named: "Bolinha-2"), for: .normal)
}
else {
buttonPressed = true
button3.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button4: UIButton!
@IBAction func buttonAction4(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button4.setImage(UIImage(named: "Bolinha-3"), for: .normal)
}
else {
buttonPressed = true
button4.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button5: UIButton!
@IBAction func buttonAction5(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button5.setImage(UIImage(named: "Bolinha-3"), for: .normal)
}
else {
buttonPressed = true
button5.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
}
您要完成的工作称为 单选按钮,不幸的是 iOS(与 macOS 不同)不提供此功能。
我的建议是利用选项将不同的图像分配给 Interface Builder 中的不同状态——在本例中为 Default
和 Selected
状态——并创建一个插座集合,一个数组表示相同类型的 UI 个元素的序列。
建议不支持空 selection,默认第一个按钮是 selected。
在ViewController
创建出口集合
@IBOutlet var buttons : [UIButton]!
和一个
IBAction
@IBAction func buttonAction(_ sender: UIButton) { }
在界面构建器中
- 将图像设置为属性检查器中每个按钮的
Default
和Selected
状态。 - 按正确顺序将按钮连接到插座集合。
- 按相同顺序将标签 0 到 4 分配给按钮。
- 将所有按钮也连接到(相同的)IBAction。
- 将图像设置为属性检查器中每个按钮的
在ViewController
为当前 selected 按钮的标签创建一个 属性
var selectedButton = 0
在viewDidLoad中select第一个按钮
override func viewDidLoad() { super.viewDidLoad() buttons[selectedButton].isSelected = true }
完成 IBAction,它删除select上一个按钮和 select当前按钮。
@IBAction func buttonAction(_ sender: UIButton) { let tag = sender.tag buttons[selectedButton].isSelected = false buttons[tag].isSelected = true selectedButton = tag }
假设您已将按钮命名如下:第一个按钮:“opt1Button”,第二个按钮:“opt2Button”,第三个按钮:“opt3Button”等等... 创建一个名为“optionSelected”的 IBAction 该函数如下所示: @IBAction func optionSelected(_ sender: UIButton) {
opt1Button.isSelected = false
opt2Button.isSelected = false
opt3Button.isSelected = false
opt4Button.isSelected = false
opt5Button.isSelected = false
sender.isSelected = true
}
一旦选择了任何选项,所有按钮都会进入 'isSelected' 错误状态,即首先会取消选择所有按钮,并且选中的按钮将标记为已选中。选择任何按钮时,将再次执行相同的过程,所有内容都将取消选择,用户按下的按钮将被标记为已选择。
从 (https://developer.apple.com/forums/thread/685124) 找到了这个答案,它对我有用。