Swift 访问 UIButton 标签

Posted

技术标签:

【中文标题】Swift 访问 UIButton 标签【英文标题】:Swift Accessing UIButton Tags 【发布时间】:2015-04-11 20:41:47 【问题描述】:

我创建了多个带有独特标签的按钮,并将这些按钮添加到我项目的 UIView 中。我想重新访问它们,以便将按钮添加到视图字典中以进行自动布局。

func createButtons() 
    for index in 0...10 
        var button = UIButton.buttonWithType(UIButtonType.System) as UIButton
        button.tag = index
        self.view.addSubview(button)
 

为自动布局创建视图字典的代码。

func createDictionary() 
    var mbd : [String:UIButton]! = [:]

    for index in 0...10 
        let tmpButton = self.view.viewWithTag(index) as? UIButton
        mbd["button" + String(index)] = tmpButton
    
    return mbd

但是,我认为上面的代码没有创建任何字典,我不知道为什么。如果我在第一个for loop 中移动我附加到字典的代码,那么一切正常。但我正在努力学习使用viewWithTag 方法,因为我会经常需要它。

感谢任何指导。

【问题讨论】:

viewWithTag 可能是邪恶的,尤其是当您使用0 作为第一个值时,因为0 是所有视图的默认值... 那么有什么更好的方法来跟踪按钮? 以大于 0 的唯一索引开始。另外,您的代码不清楚。您创建了一个变量buttonsDictionary,该变量在该函数中不再使用。相反,您使用mbd(它是一个类变量吗?),它也是从该函数返回的...... 很抱歉,这是一个错字。所以 1 的唯一索引但仍然使用 viewWithTag 可以吗? 如果是唯一的而不是0就可以了 【参考方案1】:

如果您不需要任何其他标签,除了创建字典,您可以在创建按钮时创建字典。

我会建议这样的事情:

func createButtons ()
    var mbd : [String:UIButton]! = [:]
    for index in 0...10 
       var button = UIButton.buttonWithType(UIButtonType.System) as UIButton
       self.view.addSubview(button)
       mbd["button" + String(index)] = button
    

此解决方案的性能也更高,因为您不需要两次调用循环,并且由于您已经拥有按钮,因此您无需再调用 viewWithTag

希望这对你有用。让我知道事情的后续!

【讨论】:

很遗憾,我稍后需要在其他功能中重新访问这些按钮。 您仍然可以添加标签,只需 (index+1)*100 或类似的东西。或者您可以保留字典(将其设置为属性)并在需要时从那里检索按钮

以上是关于Swift 访问 UIButton 标签的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UIButton 没有固定在屏幕底部

Swift - 无论状态如何设置 UIButton 标题

UIButton移动动画

UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加

UIButton 的渐变未显示

为 UIButton 设置 titleLabel