【问题标题】:Swift Accessing UIButton TagsSwift 访问 UIButton 标签
【发布时间】: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就可以了

标签: ios swift uibutton autolayout


【解决方案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 或类似的东西。或者您可以保留字典(将其设置为属性)并在需要时从那里检索按钮
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2018-11-24
  • 2019-10-07
  • 1970-01-01
相关资源
最近更新 更多