Dan*_*ark 8 objective-c uikit app-store ios
由于UIBarButtonItem不是子类UIView,因此不可能像它那样获得正常的特征frame.
一种方法是 [barButtonItem valueForKey:@"view"]
这非常有效,并允许您将GestureRecognizer(例如)添加到底层UIView.
但是,这是私有UIKitAPI违规吗?
Far*_*ler 16
就验证时立即拒绝而言,这不是私密的,但它足够私密,被认为是脆弱的(也就是说,新的iOS版本可能会破坏使用该代码的应用商店中的现有应用).
我可以说,类似的代码(通过KVC获取UIToolbar的backgroundView ivar)已通过应用商店验证并正在生产中使用.
如果可能出现问题,您必须将方法包装起来@try { ... } @catch,以便拦截KVC可能在较新的iOS版本中失败.
"这不是私人"的五个证据
这是您可以通过其他方式获得的财产.试试这个,其中一个观点实际上就是问题的_view伊瓦尔UIBarButtonItem.这表明访问UIView它本身并不是禁止的,尽管KVO方式可能有问题(但我对此表示怀疑).
NSArray *array = self.toolBar.subviews;
for (UIView *view in array) {
view.backgroundColor = UIColor.greenColor;
}
Run Code Online (Sandbox Code Playgroud)他们实际上触发了这个属性的KVO.ivars不必触发KVO API,对吗?
@Farcaller提到了一个在App Store中出售的类似案例.由于他/她在问题的前20分钟内回答,因此假设App Store中可能有数千个应用程序执行此操作是合理的(但不安全!).
每次按下按钮时,此UIView都会被取消,因此您不能仅仅在其上设置手势识别器并完成.但是,每次view更换时,您都可以继续设置相同的手势识别器.对我来说,这实际上更多的证据表明它不是私有的API,而是在使用它时必须非常小心(并使用KVO来确保你拥有最新的).
我的应用程序是在App Store中出售并执行此操作.
| 归档时间: |
|
| 查看次数: |
3953 次 |
| 最近记录: |