没有一个答案对我有用。我的目标是 iOS 7。但我找到了答案。
我正在尝试的是类似于 Twitter iOS 应用程序的东西。如果您单击“时间线”选项卡中的放大镜,UISearchBar
则会出现“取消”按钮激活、键盘显示和最近搜索屏幕。滚动最近的搜索屏幕,它会隐藏键盘,但会保持“取消”按钮处于激活状态。
这是我的工作代码:
UIView *searchBarSubview = self.searchBar.subviews[0];
NSArray *subviewCache = [searchBarSubview valueForKeyPath:@"subviewCache"];
if ([subviewCache[2] respondsToSelector:@selector(setEnabled:)]) {
[subviewCache[2] setValue:@YES forKeyPath:@"enabled"];
}
我通过在表格视图的scrollViewWillBeginDragging:
. 我查看了我的UISearchBar
并显示了它的子视图。它总是只有一个类型UIView
(我的变量searchBarSubview
)。
然后,它UIView
包含一个NSArray
被调用subviewCache
的元素,我注意到最后一个元素,即第三个元素,是 type UINavigationButton
,而不是在公共 API 中。所以我开始改用键值编码。我检查了是否UINavigationButton
响应setEnabled:
,幸运的是,它响应。所以我将属性设置为@YES
. 原来那UINavigationButton
是取消按钮。
如果苹果决定改变 a 的实现,这势必会被打破UISearchBar
,但到底是什么。它现在有效。