在应该在iOS 6和iOS 7上运行的应用程序中,如果该应用程序在iOS 7上运行,则不再显示嵌入在导航栏中的搜索栏的“取消”按钮。在iOS 6上,它可以工作。
搜索栏位于导航栏的标题视图中,如果搜索栏成为第一响应者,则应显示“取消”按钮:
IOS 7
iOS 6
在一个隔离的测试用例中,代码非常简单:
@interface MyViewController : UITableViewController<UISearchBarDelegate>
@property (nonatomic) IBOutlet UISearchBar* searchBar;
@end
@implementation MyViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.titleView = self.searchBar;
}
- (void) searchBarTextDidBeginEditing: (UISearchBar*) searchBar {
[searchBar setShowsCancelButton: YES animated: YES];
}
@end
这是我在文档中错过的iOS 7中的故意更改吗?如果是,应该怎么做?
如果不是,我在代码中犯了一个错误吗?
看来您所做的一切都正确,但是显然Apple已在iOS 7中进行了一些更改。根据iOS 7中的SO问题,“取消”按钮未出现在的UISearchBar
嵌入式按钮中UINavigationBar
。
根据开发人员文档,该showsCancelButton
属性的作用可能与setShowsCancelButton:Animated
方法略有不同。尝试这样做:
searchBar.showsCancelButton = YES;
[searchBar setShowsCancelButton:YES animated:YES];
我不确定这是否会产生影响。您也可以尝试将代码放在其他委托方法中:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar; // return NO to not become first responder
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar; // called when text starts editing
您可能还想签出iOS 7 changelog。好像Apple改变了行为,或将UISearchDisplayController
/UISearchBar
添加到时更改了/ UINavigationBar
。看一下UIKit部分下的最后一个要点(尽管不清楚到底是什么更改了)。
您可能还想尝试使用UISerachDisplayController
。甚至更容易的是将嵌入到UISearchBar
的标头中UITableView
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句