Using `valueForKey` to access view in UIBarButtonItem, private API violation?(使用 `valueForKey` 访问 UIBarButtonItem 中的视图,违反私有 API?)
问题描述
由于UIBarButtonItem
不是UIView
的子类,因此不可能获得像它的frame
这样的正常特征.
Since UIBarButtonItem
doesn't subclass UIView
, it's impossible to get at the normal characteristics like its frame
.
一种方法是 [barButtonItem valueForKey:@"view"]
这非常有效,并且允许您将 GestureRecognizer(例如)添加到底层 UIView
.
This works perfectly, and allows you to add a GestureRecognizer (for instance) to the underlying UIView
.
但是,这是一个私有的 UIKit
API 违规吗?
However, is this a private UIKit
API violation?
推荐答案
这在验证后立即拒绝方面不是私有的,但它的私有性足以被认为是脆弱的(也就是说,新的 iOS 版本可能会破坏您现有的应用程序使用代码的应用商店).
This is not private in terms of immediate rejection upon validation, but it's private enough to be considered fragile (that is, new iOS version can break your existing app in the app store that's using the code).
我可以说,类似的代码(通过 KVC 获取 UIToolbar 的 backgroundView ivar)已经通过了应用商店的验证,并且正在生产中使用.
I can say, that a similar code (fetching backgroundView ivar of UIToolbar via KVC) has passed app store validation and is being used in production.
如果可能发生坏事,您必须将方法包装在 @try { ... } @catch
中,以便在较新的 iOS 版本中拦截可能失败的 KVC.
In case of possible bad things, you must wrap the method in @try { ... } @catch
, so that you intercept KVC possibly failing in newer iOS release.
这篇关于使用 `valueForKey` 访问 UIBarButtonItem 中的视图,违反私有 API?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 `valueForKey` 访问 UIBarButtonItem 中的视图,违反私有 API?
基础教程推荐
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01