我正在尝试像这样访问UIBarButtonItem
的框架:
if let items = self.toolbarItems{
let item = items[1]
print(item)
let view = item.value(forKey: "view") as! UIView
}
使用 print(item)
可以返回一个已经存在的 item(条目)。为什么不能获取一个 UIView
?
我正在尝试像这样访问UIBarButtonItem
的框架:
if let items = self.toolbarItems{
let item = items[1]
print(item)
let view = item.value(forKey: "view") as! UIView
}
使用 print(item)
可以返回一个已经存在的 item(条目)。为什么不能获取一个 UIView
?
使用未记录的属性的问题在于它们可能会在没有通知的情况下发生更改。
以下是使用Xcode 8.3.1和iOS 10 SDK的结果。
let item1 = UIBarButtonItem(customView: UIView())
let view1 = item1.value(forKey: "view") as? UIView
print("\(view1)")
Optional(<UIView: 0x7f9049001400; frame = (0 0; 0 0); layer = <CALayer: 0x60000003cc00>>)
然而
let item2 = UIBarButtonItem(title: "Test", style: .plain, target: nil, action: nil)
let view2 = item2.value(forKey: "view") as? UIView
print("\(view2)")
打印
nil
class MyObject: NSObject { @objc var view: UIView? } // Fake to get selector
let item3 = UIBarButtonItem(title: "Test", style: .plain, target: nil, action: nil)
let view3 = (item3 as NSObjectProtocol).perform(#selector(getter: MyObject.view))?.takeRetainedValue()
print("\(view3)")
nil
UIBarButtonItem
不是一个视图。 - rmaddy