2017-01-20 172 views
0

我在Swift 3上工作,我试图使复选框的行为像单选按钮。我自我解释:我有8个按钮;每个图像都有一个“未检查”图像和一个“检查”图像。我只想选择1个按钮(所以,显示ITS“检查”的图像)。单选按钮的原理。 所以我尝试使用@IBAction与每个按钮,我有这样的:斯威夫特单选按钮 - 复选框 - 斯威夫特3

@IBAction func tona1_changed(_ sender: Any) { 
if test_tona1.isSelected == true 
     { 
      test_tona1.setBackgroundImage(UIImage(named: "0b_unchecked"), for: UIControlState.normal) 

      test_tona1.isSelected = false 
     } 
     else 
     { 
      test_tona1.setBackgroundImage(UIImage(named: "0b_checked"), for: UIControlState.normal) 

      test_tona1.isSelected = true 
     }} 

这实际上使之间的图像切换“取消”和“检查”,但我不知道一切是如何使它与其他按钮进行交互。 我试着用里面的按钮的标签数组,但我没有工作。我也尝试上课,但我不知道它是如何工作的。 谢谢!

回答

1

你可以通过几种方法实现。其中最琐碎的是:

  • 有一个数据源。大部分时间是数组。
  • 为数据源中的每个项目创建一个UIButton,并将每个按钮插入另一个数组。每个按钮都有一个标签,该标签对应于数组的索引 。还为选定的状态和正常设置不同的图像。
  • 添加操作每个按钮,与目标函数是这样的:

    func buttonPressed(sender:UIButton) { 
        for button in buttons { 
         button.isSelected = false 
         // deselect your model datasource[button.tag] 
        } 
    
        sender.isSelected = true 
        // select your model datasource[button.tag] 
    } 
    

我离开抽象/改进/安全给你。关键在于使用一组按钮,遍历它们,并相应地选择/取消选择它们,并且而不是每次使用大if/else检查按钮标记。

+0

他也可以选择所有按钮,并将其作为从接口生成器到代码的“Outlet Collection”。 – muescha

+0

是的,但要小心,因为Outlet Collection无法确保顺序得到遵守。你必须通过viewDidLoad上的标签对它进行排序,这看起来有点“黑客”。 –