我试图在detailDisclosure
上找到特定类型(UIViewController
)的所有按钮。要查看视图中的所有UIButtons
,请使用以下内容:
let buttons = view.subviews.filter{$0 is UIButton}
如何按按钮类型进行过滤,在本例中为detailDisclosure
?
我尝试使用UIButtonType w /原始值2和UIButtonType.detailDisclosure
,但是我收到编译错误。
let buttons = view.subviews.filter{$0 is UIButtonType.detailDisclosure}
感谢您的阅读。
答案 0 :(得分:3)
在过滤器闭包中,首先需要使用条件类型强制转换运算符(UIButton
)检查每个视图是否为as?
。如果是按钮,则可以检查buttonType
属性是否为.detailDisclosure
。
let buttons = view.subviews.filter {
guard let button = $0 as? UIButton else {
return false
}
return button.buttonType == .detailDisclosure
}
对于等效的单行解决方案,您可以使用buttonType
属性的可选链接,但请注意,您必须将类型添加到.detailDisclosure
(UIButtonType
)之前,因为它可以不再推断。
buttons = view.subviews.filter { ($0 as? UIButton)?.buttonType == UIButtonType.detailDisclosure }
答案 1 :(得分:1)
试试这个......
let buttons = view.subviews.filter { (v) -> Bool in
if let btn = v as? UIButton {
if btn.buttonType == .detailDisclosure {
return true
}
}
return false
}
答案 2 :(得分:0)
这是swift 2.3但你可以在你的过滤方法中做这样的事情
if buton.buttonType == UIButtonType.DetailDisclosure {
}
答案 3 :(得分:0)
这个对我来说很完美:(斯威夫特3)
let buttons = view.subviews.filter{$0 is UIButton}
for btn in buttons as! [UIButton] {
if btn.buttonType == .detailDisclosure {
print(bin)
}
}