实际上我从 JSON webservice获取数据。我需要使用UITableView
从uisearchdisplaycontroller
单元格中搜索数据。
我已使用具有多个数组的NSMutablArray
成功将数据传递到单元格中。但现在我需要从中搜索数据。
我的阵列:
[
{
"name": "jhon",
"city": "chennai",
}
{
"name": "Micle",
"city": "Newyork",
}
{
"name": "Micle",
"city": "Washigton",
}
]
我在UITableView中的自定义单元格:
cell.P_name.text = [details objectForKey:@"name"];
cell.P_city.text = [details objectForKey:@"city"];
在搜索中我试过:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
//-- Help to customize operations
searchResults = [[NSArray alloc]initWithArray:mainArray];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText];
searchResults = [details filteredArrayUsingPredicate:resultPredicate];
[tableView reloadData];
}
任何人都可以帮忙解决我的问题。
答案 0 :(得分:3)
你应该有2个数组:
mainDataList
)dataSourceList
)最初:
self.dataSourceList = self.mainDataList;
因为您正在显示表视图中的所有数据。取消任何搜索后,您也会返回此状态(然后重新加载)。
但是在搜索时,您需要过滤dataSourceList
的内容并重新加载表格:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
self.dataSourceList = [self.mainDataList filteredArrayUsingPredicate:resultPredicate];
[tableView reloadData];
}
注意:上述谓词只搜索词典中的name
...
现在,您的所有表视图方法仅使用self.dataSourceList
,并根据您的状态修改其内容。你的代码干净简单。微笑: - )
答案 1 :(得分:0)
我只是把我的逻辑在 .h 文件名中添加了一个可变数组 _temArray
将 _mainArray (填充在tableView上)添加到您的 _temArray ,例如,
[_temArray addObjectsFromArray:_mainArray];
在搜索方法中,使用NSPredicate
:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
//-- Help to customize operations
if([searchText length] > 0)
{
NSMutableArray *fileterMainArray = (NSMutableArray *)_temArray
NSPredicate *predicatePeople = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", searchText]; // here if you want to search by city then change "name" to "city" at pattern.
NSArray *filteredArray = [fileterMainArray filteredArrayUsingPredicate:predicatePeople];
[_mainArray addObjectsFromArray:filteredArray];
}
else
[_mainArray addObjectsFromArray:_temArray];
[self.tblView reloadData]; // don't forget to reload Table data.
}