0

私のアプリでは、3つNSMutableArrayのs、つまりempJsonArray searchArraynameArray

empJsonArrayJSON を使用して入力されます。 nameArrayにはvalueForKey:@"Name"fromが取り込まれempJsonArraysearchArray最初は の内容が取り込まれempJsonArrayます。

データはUITableView

今、私はUISearchBar自分を検索してUITableView関連データを表示するために使用しています。UISearchBar正常に動作していますが、検索データが表示されるときに問題が発生します。「T」を検索すると、文字「T」を含む名前が 2 つあるとしますUITableView。2 つの項目が表示されますが、「T」を含む項目ではなく、先頭nameArray(つまり、インデックス 0 と 1) が形成されます。

も使用してNSSortDescriptorいます。

コードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MYCell"];
if (!cell) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MYCell"];
}
sorter = [[NSSortDescriptor alloc]initWithKey:@"Name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
sortedArray = [self.empJsonArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]];
cell.textLabel.text = [[sortedArray objectAtIndex:indexPath.row]objectForKey:@"Name"];
nameArray = [[NSMutableArray alloc]initWithArray:[sortedArray valueForKey:@"Name"]];

return cell;

}

検索方法:

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

if ([searchText length]==0) {
    [searchArray removeAllObjects];
    [searchArray addObjectsFromArray:nameArray];

}
else {
    [searchArray removeAllObjects];
    for (NSString *string in nameArray) {
        NSRange r = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];
        if (r.location != NSNotFound) {
            [searchArray addObject:string];
        }
    }
}
[empTable reloadData];

}

ここでスクリーンショットを見ることができます 1.検索前 2.検索後

4

1 に答える 1

0

問題が解決しました。

検索結果を表示する代わりにcell

cell.textLabel.text = [[searchArray objectAtIndex:indexPath.row]

展示してました

cell.textLabel.text = [[sortedArray objectAtIndex:indexPath.row]objectForKey:@"Name"];
于 2012-09-20T09:16:10.980 に答える