3

我将 UICollectionView 添加到 ViewController。UICollectionView 在每个单元格上显示带有人名的项目网格。我想在您键入功能时添加搜索功能,该功能将在用户将其名称输入到 ViewController 上的搜索栏或 UITextField 时过滤 UICollectionView,以便它不会随着 UICollectionView 中的内容滚动。

尽管我在一些地方读到 UICollectionView 与 UITableView 相似,但我没有看到在 UICollectionView 中实现此过滤器/搜索功能与在 UITableView 中实现此过滤器/搜索功能相同,并且需要一些帮助。

当您使用 UICollectionView 键入功能时,有没有人有一个很好的例子来做这个搜索/过滤?

4

1 回答 1

4

我通过执行以下操作解决了它(希望它可以帮助其他人):

我将 CoreData 中的 UICollectionView 填充到 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];

}
于 2013-01-19T15:59:13.060 回答