我正在尝试在我的UIBarButton的右上角创建一个徽章编号。对于iOS 9和10它可以正常工作但是对于iOS 11我无法访问按钮的视图,我通常会这样做:
extension UIBarButtonItem {
func createBadge() {
guard let view = self.value(forKey: "view") as? UIView else {
return
}
}
}
我知道使用键值对于这样的情况不是一个好主意,因为键可以改变。但是这里有替代方法,使用公共API,以便解决方案也适用于iOS 11吗? 感谢。
答案 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
}