在Swift

时间:2017-06-15 00:27:29

标签: ios uiview swift3 uibarbuttonitem

希望这是一个简单的问题。我试图获得UIBarButtonItem的UIView。查看以下StackOverflow question我想出了以下代码:

let notificationButton = UIBarButtonItem(image: UIImage(named: "icon_notification.png"), style: .plain, target: self, action: nil)

let notificationView = notificationButton.value(forKey: "view") as? UIView

但是,notificationView是零。那么,想一想我没有从链接的StackOverflow问题中解释什么?

2 个答案:

答案 0 :(得分:1)

所以,DS Dharma给了我一个最终起作用的想法。 "视图" value仅在分配给工具栏导航项后才可用,如下所示:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "icon_notification.png"), style: .plain, target: self, action: nil)

self.navigationItem.rightBarButtonItem?.addBadge(number: 0, withOffset: CGPoint(x: 7.0, y: 0.0) , andColor: UIColor.black, andFilled: true)

其中addBadge()函数需要UIView。顺便说一句,如果有人想知道,addBadge函数来自这篇文章:http://www.stefanovettor.com/2016/04/30/adding-badge-uibarbuttonitem

强烈建议您使用此功能。

答案 1 :(得分:0)

从iOS 11开始,此代码将不起作用,因为以下代码行将不会强制转换UIView。此外,它还算作私有API,似乎不会通过AppStore审查。

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

Thread on: forums.developer.apple