如果您将 UISearchDisplayController 与 UITableViewController 一起使用,则当用户点击搜索栏时,它会动画化以替换导航栏。
在 UICollectionViewController 顶部使用 UISearchBar 时,我希望获得相同的效果。有任何想法吗?
如果您将 UISearchDisplayController 与 UITableViewController 一起使用,则当用户点击搜索栏时,它会动画化以替换导航栏。
在 UICollectionViewController 顶部使用 UISearchBar 时,我希望获得相同的效果。有任何想法吗?
我必须以编程方式将 searchBar 添加为 UICollectionReusableView 的子视图,我永远无法通过 IB 让它工作,因为我在分配插座时不断收到原型错误。在实现文件中添加搜索栏对我有用。
相关方法如下。
-(void)viewDidLoad
{
[super viewDidLoad];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier];
_objectChanges = [NSMutableArray array];
_sectionChanges = [NSMutableArray array];
[self performFetch];
searchBar = [[UISearchBar alloc]
initWithFrame:CGRectMake(0.0, 50.0, self.view.bounds.size.width,
44.0)];
searchBar.placeholder = @"Search for channels";
searchBar.tintColor = [UIColor blackColor];
searchBar.delegate = self;
}
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
SupplementaryView *header = nil;
if ([kind isEqual:UICollectionElementKindSectionHeader])
{
header = [self.collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:@"reuseHeader"
forIndexPath:indexPath];
[header addSubview:searchBar];
}
return header;
}
我刚刚进行了同样的询问,我想出了一个不成熟但有效的解决方案,它不涉及重写 UISearchDisplayController。
(结束结果:一个 UITableView——对 shouldReloadTableForSearchString 的回答——覆盖在 UICollectionView 的顶部,一旦你点击搜索,它就会被关闭,并且你的结果在 collectionView 中。如果感兴趣,请继续阅读)
在 IB 中创建了一个 UIViewController,我在其中插入(见屏幕截图):一个用于布局目的的视图 --> 我首先在其中放置了一个 UISearchBar 和显示控制器。在同一个视图(并排)中,我删除了一个带有自定义 UICollectionViewCell 的 UICollectionView。然后我放入了一个 UITableViewProvider (使用自定义 UITableCell,但这不是必需的,您也可以忽略屏幕截图中的 UITabBarItem 和 Nav 项,这无关紧要)
我将 UITableView 的高度设置为 0,并连接了所有的 Outlets 和代表,最终结果如下,当光标进入 UISearchBox 时,UITableView 覆盖在 UICollectionView 顶部,作为一种类型,shouldReloadTableForSearchString del 被调用并结果出现在tableView中;在 searchBarSearchButtonClicked 上,我只需设置 UICollectionView 的 dataSource 并在其插座上调用 reloadData,等等。
有人会认为 Apple 应该通用化搜索显示控制器;也许在未来的版本中?
(这是有效的,因为这是 UISearchDisplay 控制器的优化方式,IIRC 实际上每个字符条目都有一个 UITableView 堆叠在一起)
(不发布代码,因为涉及很多;请询问是否有任何不直截了当的地方)
这里只是一个快速代码 - 为我工作!
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
let headerView = self.mainPictureCollectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headerView", forIndexPath: indexPath)
headerView.addSubview(searchBar)
return headerView
}