簡體   English   中英

如何循環遍歷我的 Swift 視圖中的所有 UIButton?

[英]How to loop through all UIButtons in my Swift view?

我將如何在 Swift 中遍歷視圖中的所有UIButtons 我想將所有標題設置為"" ,但我在 Swift 中的 for 循環出現錯誤。

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

此代碼應該工作:

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

您需要遍歷 subViews 數組。

為 Swift 3 & 4 縮短和更新

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

循環子視圖有效,但有時有點難看,並且還有其他問題。

如果您需要循環播放某些特定按鈕,例如添加圓角半徑或更改色調或背景顏色,您可以使用一組 IBOutlets,然后循環播放。

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

要為常見用例添加一些上下文,假設按鈕位於滾動視圖中,並且您想突出顯示點擊的按鈕並取消突出顯示其他按鈕。 在這種情況下,您會將所有按鈕定向到一個操作方法:

@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
        }
    }
}

這段代碼對於迭代視圖中的任何對象似乎非常有用,只需將 UIButton 更改為任何其他子視圖類型,例如 UIView 或 UIImageView 等。

let filteredSubviews = self.view.subviews.filter({
    $0.isKindOfClass(UIButton)})

for view in filteredSubviews {
    //Do something        
}

使用了一些提供的問題並創建了我自己的問題。 當您想以編程方式設置各種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)
        }
    }

斯威夫特 4:

let subviewButtons = self.view.subviews.filter({$0.isKind(of: UIButton.self)})

for button in subviewButtons {
    //do something        
}

如果您在self.viewUIView那么您需要在搜索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)
}

希望這可以幫助!

如果您知道子視圖只有按鈕,那么這是 Swift 中的一個簡短方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM