如何让用户在具有多个 UIButtons 的视图中只选择一个自定义 UIButton?斯威夫特 3

Posted

技术标签:

【中文标题】如何让用户在具有多个 UIButtons 的视图中只选择一个自定义 UIButton?斯威夫特 3【英文标题】:How to make the user select only one custom UIButton in a view with multiple UIButtons? Swift 3 【发布时间】:2017-05-14 18:52:13 【问题描述】:

我在这里要做的是,我希望用户在具有多个 UIButton 的视图控制器中选择一个自定义 UIButton,但是当用户选择一个 UIButton 时,我怎样才能使它成为可能,如果他想要选择另一个,用户单击的第一个 UIButton 将被取消选择。

如何让用户只选择一个 UIButton?如果一个 UIButton 被选中,另一个 UIButton 被选中,前者将被取消选中

【问题讨论】:

【参考方案1】:

因此,您在按钮周围有某种边框,然后您可以遍历所有按钮并找到带有边框的按钮,将其删除,然后将边框设置为新选择的按钮。像这样的:

func buttonSelected(clickedButton: UIButton) 
    for case let button as UIButton in self.view.subviews 
        if button.layer.borderColor == UIColor.black.cgColor 
            // deselect it here by changing the border
            button.layer.borderColor = UIColor.clear.cgColor
        
        // select the clicked button
        clickedButton.layer.borderColor = UIColor.black.cgColor
    

【讨论】:

【参考方案2】:

有时很高兴知道选择了哪一个,所以我会做这样的事情。

var selectedButton: UIButton? 
    didSet 
       selectedButton?.layer.borderColor = UIColor.black.cgColor
    


func buttonSelected(sender: UIButton) 
    //Already selected check
    guard selectedButton != sender else  return 
    //Change current selected button properties
    selectedButton?.layer.borderColor = UIColor.clear.cgColor
    //Choose new selected button
    selectedButton = sender

如果你想改变很多东西,我建议继承 UIButton 并在其中包含两个函数。 setSelected() 和 setUnselected() 那么它会像这样工作:

var selectedButton: SelectableButton?

func buttonTapped(sender: SelectableButton) 
     guard selectedButton != sender else  return 
     sender.setSelected()
     selectedButton?.setUnselected()
     selectedButton = sender

编辑:我认为这是一个更好的解决方案,然后在所有子视图中执行 for 循环......

【讨论】:

以上是关于如何让用户在具有多个 UIButtons 的视图中只选择一个自定义 UIButton?斯威夫特 3的主要内容,如果未能解决你的问题,请参考以下文章

是否可以跨多个视图维护 UIButtons?

我应该如何在 iOS 7 中使用具有 iOS 6 风格的 UIButtons?

如何根据按下的 UIButton 重新填充表格视图?

如何让地图视图中的应用程序用户删除多个图钉?

iOS 相机应用程序中的可拖动 UIButtons

具有正面或负面属性的 iOS UIButtons