【问题标题】:How to loop through all UIButtons in my Swift view?如何遍历我的 Swift 视图中的所有 UIButton?
【发布时间】:2014-09-07 21:39:22
【问题描述】:

如何在 Swift 的视图中遍历所有 UIButtons?我想将所有标题设置为"",但我在 Swift 中的 for 循环出错了。

for btns in self.view as [UIButton] {
  // set the title to ""
}

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:

    这段代码应该可以工作:

    for view in self.view.subviews as [UIView] {
        if let btn = view as? UIButton {
            btn.setTitleForAllStates("")
        }
    }
    

    您需要遍历 subViews 数组。

    【讨论】:

      【解决方案2】:

      针对 Swift 3 和 4 进行了缩短和更新

      for case let button as UIButton in self.view.subviews {
          button.setTitleForAllStates("")
      }
      

      【讨论】:

        【解决方案3】:

        循环遍历子视图有效,但有时有点难看,并且还有其他问题。

        如果您需要循环访问某些特定按钮,例如添加圆角半径或更改色调或背景颜色,您可以使用 IBOutlets 数组,然后对其进行循环。

        var buttons = [SkipBtn, AllowBtn]
        for button in buttons as! [UIButton] {
            button.layer.cornerRadius = 5
        }
        

        【讨论】:

          【解决方案4】:

          要为常见用例添加一些上下文,假设按钮位于滚动视图中,并且您想要突出显示点击的按钮并取消突出显示其他按钮。在这种情况下,您可以将所有按钮指向一个操作方法:

          @objc private func buttonAction(_ button: UIButton) {
              for case let b as UIButton in view.scrollView.subviews {
                  if b == button {
                      b.setTitleColor(UIColor.green, for: []) // highlight
                  } else {
                      b.setTitleColor(UIColor.black, for: []) // de-highlight
                  }
              }
          }
          

          【讨论】:

            【解决方案5】:

            这段代码似乎对于迭代视图中的任何对象都非常有用,只需将 UIButton 更改为任何其他子视图类型,例如 UIView 或 UIImageView 等。

            let filteredSubviews = self.view.subviews.filter({
                $0.isKindOfClass(UIButton)})
            
            for view in filteredSubviews {
                //Do something        
            }
            

            【讨论】:

              【解决方案6】:

              使用了一些提供的问题并创建了我自己的问题。当您想以编程方式设置各种UIButtons 的标题时,我相信这是最有效的(在我的情况下,我正在构建一个测验)

              通过randomising我的数组列表,我只用一个for循环打印按钮标题索引处的项目

              for view in self.viewForButtons.subviews{
                      if view.isKindOfClass(UIButton)
                      {
                          let button : UIButton = view as! UIButton
                          button.setTitle("item[i]", forState: .Normal)
                      }
                  }
              

              【讨论】:

                【解决方案7】:

                斯威夫特 4:

                let subviewButtons = self.view.subviews.filter({$0.isKind(of: UIButton.self)})
                
                for button in subviewButtons {
                    //do something        
                }
                

                【讨论】:

                  【解决方案8】:

                  如果您在self.view 中有UIView,那么您需要在搜索UIButton 时遍历子视图。使用公认的答案,我做了这个小功能:

                  斯威夫特 4 + :

                  func findButton(`in` view: UIView){
                      for view in view.subviews as [UIView] {
                          if let button = view as? UIButton {
                              // Do something with 'button'
                          }else{
                              // Loop through subview looking for buttons
                              findButton(in: view)
                          }
                      }
                  }
                  

                  用法:

                  override func viewDidLoad() {
                      findButton(in: self.view)
                  }
                  

                  希望这会有所帮助!

                  【讨论】:

                    【解决方案9】:

                    如果您知道子视图只有按钮,那么这是 Swift 中的一种简短方法:

                    myView.subviews.map {
                      ($0 as? UIButton)!.enabled = false
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2011-02-05
                      • 2010-11-13
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-02-28
                      • 1970-01-01
                      • 2011-04-18
                      相关资源
                      最近更新 更多