[英]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.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)
}
希望這可以幫助!
如果您知道子視圖只有按鈕,那么這是 Swift 中的一個簡短方法:
myView.subviews.map {
($0 as? UIButton)!.enabled = false
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.