1

キャンセル ボタンを使用して を作成しましたUISearchbarが、キャンセル ボタンをクリックすると、配列が表示されず、キーボードが閉じられます。

allItemsありNSArraydisplayItemsありNSMutableArray

-(void)searchBarSearchButtonClicked:(UISearchBar *)asearchBar{
[displayItems addObject:allItems];
[searchBar resignFirstResponder];
 }


-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{

if ([searchText length] == 0) {
    [displayItems removeAllObjects];
    [displayItems addObjectsFromArray:allItems];

} else {

    [displayItems removeAllObjects];
    for (NSString * string in allItems ){
        NSRange r =[string rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (r.location != NSNotFound){
            [displayItems addObject:string];
        }
    }

    [tableView reloadData];

} 

 }


       - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellAccessoryDisclosureIndicator;
}

 -(void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar{
[displayItems removeAllObjects];
[displayItems addObjectsFromArray:allItems];
[searchBar resignFirstResponder];
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)asearchBar{
[searchBar resignFirstResponder];
}
4

1 に答える 1

1

これには 2 つの配列を使用する必要があります。1 つは originalData などと呼ばれる NSArray で、もう 1 つはfilteredData と呼ばれる NSMutableArray です。これらは両方とも最初は同じで、フィルタリングするときに、originalData 配列からfilteredData 配列を構築/再構築します。大まかな例を次に示します。

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{

    if ([searchText length]) {
        [displayItems removeAllObjects];
        for (NSString * string in allItems ){
            NSRange r =[string rangeOfString:searchText options:NSCaseInsensitiveSearch];

            if (r.location != NSNotFound){
                [displayItems addObject:string];
            }

        [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
        }
    } 
}



-(void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar{
    [searchBar resignFirstResponder];
    self.displayItems = [[NSMutableArray alloc] initWithArray:allItems];
    [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 
}

ScrollView( )のデリゲート メソッドも追加しTableViewて、スクロールの開始時にキーボードが閉じられるようにします。

#pragma mark - ScrollView (UITableView) delegate methods
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    [mySearchBar resignFirstResponder];
}
于 2012-10-30T15:33:25.090 に答える