3

UICollectionViewをViewControllerに追加しました。UICollectionViewは、各セルに人の名前が付いたアイテムのグリッドを表示します。UICollectionViewのコンテンツと一緒にスクロールしないように、ユーザーがViewControllerの検索バーまたはUITextFieldに名前を入力すると、UICollectionViewをフィルタリングする機能を入力時に検索を追加したいと思います。

UICollectionViewがUITableViewに似ていることを読んだいくつかの場所ですが、このフィルター/検索機能の実装がUICollectionViewでUITableViewの場合と同じであり、何らかの支援が必要であることがわかりません。

UICollectionViewで機能を入力するときに、この検索/フィルターを実行する良い例はありますか?

4

1 に答える 1

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];

}
于 2013-01-19T15:59:13.060 に答える