JVS*_*JVS 4 uiview uibarbuttonitem ios swift
我试图访问这样的框架UIBarButtonItem:
if let items = self.toolbarItems{
let item = items[1]
print(item)
let view = item.value(forKey: "view") as! UIView
}
Run Code Online (Sandbox Code Playgroud)
print(item)返回现有项目.为什么不能UIView回来?
这是使用未记录的属性的问题.他们可以在不事先通知的情
以下是使用iOS 10 SDK的Xcode 8.3.1的结果.
let item1 = UIBarButtonItem(customView: UIView())
let view1 = item1.value(forKey: "view") as? UIView
print("\(view1)")
Run Code Online (Sandbox Code Playgroud)
版画
Optional(<UIView: 0x7f9049001400; frame = (0 0; 0 0); layer = <CALayer: 0x60000003cc00>>)
Run Code Online (Sandbox Code Playgroud)
然而
let item2 = UIBarButtonItem(title: "Test", style: .plain, target: nil, action: nil)
let view2 = item2.value(forKey: "view") as? UIView
print("\(view2)")
Run Code Online (Sandbox Code Playgroud)
版画
nil
Run Code Online (Sandbox Code Playgroud)
甚至把它提升到一个新的水平
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)")
Run Code Online (Sandbox Code Playgroud)
版画
nil
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |