【发布时间】:2014-04-28 15:51:23
【问题描述】:
在我的项目中,我需要一个 UISearchBar 来滚动 UITableView。所以我把它放在UITableViewCell 这样的地方:
searchBar = [[SearchBar alloc] initWithFrame:cell.bounds];
searchBar.delegate = self;
searchBar.placeholder = NSLocalizedString(@"Search friends", "");
searchBar.layer.borderWidth = 1.f;
searchBar.layer.borderColor = [UIColor whiteColor].CGColor;
sdc = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:nil];
sdc.delegate = self;
[cell addSubview:searchBar];
它在 iOS 6 上运行良好。但在 iOS 7 上,当它刚刚获得焦点时,它会切换到另一个超级视图(并从屏幕上消失)。起初我认为我的项目有问题会导致这种行为,但后来我创建了一个简单的测试项目并验证了这一点 - 事实上,这是一个规则,在 iOS 7.1 上 UISearchBar 添加到 UITableViewCell 移动到另一个超级视图和成为第一响应者后立即从屏幕上消失。
我已经覆盖了搜索栏上的willMoveToSuperview: 方法,我看到它从UITableViewCellScrollView 移动到一个视图,哪个类是UIView,其父视图的类是UISearchDisplayControllerContainerView。
经过几个小时的搜索和实验,我无法弄清楚导致这种行为的原因以及如何逃避它。我所知道的是,它恰好发生在对这两个 UISearchDisplayDelegate 方法的调用之间:searchDisplayControllerWillBeginSearch: 和 searchDisplayControllerDidBeginSearch:。
有人遇到过这种情况吗?任何想法如何解决它?
【问题讨论】:
-
搜索栏不使用单元格,而是将搜索栏设为表格视图的
headerView。 -
@rmaddy 谢谢你的建议,我会试试的
标签: ios objective-c uikit uisearchbar uisearchdisplaycontroller