查找视图上的所有detailDislosureButtons

时间:2017-05-23 02:02:41

标签: ios swift uibutton uikit

我试图在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}

感谢您的阅读。

4 个答案:

答案 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属性的可选链接,但请注意,您必须将类型添加到.detailDisclosureUIButtonType)之前,因为它可以不再推断。

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