我在ViewController中添加了一个UICollectionView。 UICollectionView显示每个单元格上具有人名的项目网格。 我希望在您键入功能时添加搜索功能,当用户在ViewController上将搜索栏或UITextField键入其名称时,将过滤UICollectionView,以便它不会与UICollectionView中的内容一起滚动。
尽管我读过UICollectionView类似于UITableView的一些地方,但我没有看到实现这个过滤器/搜索功能在UICollectionView中与UITableView相同,需要一些帮助。
当您使用UICollectionView键入功能时,有没有人有一个很好的例子来执行此搜索/过滤?
答案 0 :(得分:4)
我通过执行以下操作解决了这个问题(希望它可以帮助其他人):
我将我的UICollectionView从CoreData填充到NSArray中:
self.allCVData = [context executeFetchRequest:fetchRequest error:&error];
然后将我的NSArray添加到NSMutableArray中,以便我可以使用它来过滤UICollection:
self.filteredCVData = [[NSMutableArray alloc] initWithArray:allCVData];
添加了一个UITextField并将其命名为searchField。
在viewDidLoad中添加了一个选择器:
[mytextfield addTarget:self action:@selector(textDidChange:) forControlEvents:UIControlEventEditingChanged];
添加了一个接受UITextField中的更改的方法:
-(void) textDidChange:(id)sender
{
UITextField* searchField = (UITextField *) sender;
if(searchField.text.length == 0)
{
self.isFiltered = FALSE;
[self.filteredCVData removeAllObjects];
[self.filteredCVData addObjectsFromArray:self.allCVData];
}
else
{
self.isFiltered = true;
[self.filteredCVData removeAllObjects];
self.filteredCVData = [[NSMutableArray alloc] init];
LogInfo(@"Before Looping in allCVData Array.");
for (OLPerson* person in allCVData)
{
NSRange firstnameRange = [person.firstname rangeOfString:searchField.text options:NSCaseInsensitiveSearch];
NSRange surnameRange = [person.surname rangeOfString:searchField.text options:NSCaseInsensitiveSearch];
if(firstnameRange.location != NSNotFound || surnameRange.location != NSNotFound)
{
[self.filteredCVData addObject:person];
}
}
}
[self.collectionView reloadData];
}