iOS 11 - 无法访问UIBarButton的UIView

时间:2017-10-16 15:33:13

标签: ios swift uiview uibarbuttonitem

我正在尝试在我的UIBarButton的右上角创建一个徽章编号。对于iOS 9和10它可以正常工作但是对于iOS 11我无法访问按钮的视图,我通常会这样做:

extension UIBarButtonItem {
    func createBadge() {
         guard let view = self.value(forKey: "view") as? UIView else {
             return
         }
    }
}

我知道使用键值对于这样的情况不是一个好主意,因为键可以改变。但是这里有替代方法,使用公共API,以便解决方案也适用于iOS 11吗? 感谢。

3 个答案:

答案 0 :(得分:0)

您可以从自定义视图中创建UIBarButtonItem。将徽章添加到自定义视图

答案 1 :(得分:0)

我建议您使用自定义视图并将其嵌入UIToolbar / UINavigationBar而不是UIBarbuttonItem

自定义视图可以包含UIButton和您的徽章视图。

通过故事板,只需将UIView拖放到栏中的插槽中,然后添加UIButton作为子视图。根据您对徽章的实现,您可以创建一个UILabel并通过相对于您的UIButton的约束来定位它。

为这些创建IBOutlets并以编程方式设置它们。

答案 2 :(得分:0)

    let button = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 25, height: 25))
    button.addTarget(self.target, action: self.action!, for: UIControlEvents.touchUpInside)
    button.target(forAction: self.action!, withSender: self.target)
    button.setImage(self.image, for: .normal)
    self.customView = button
    guard let view = self.value(forKey: "view") as? UIView else {
        return
    }