0

我需要为表格视图添加一个搜索栏。表格包含“名称”,它实际上存储在一个名为“患者”的对象中。我有一个“患者”对象数组。所以要设置一个搜索栏来搜索名称。但是如何使用 NSPredicate 呢?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
      static NSString* CellId= @"cell";
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
     if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellId] ;
    }
    cell.accessoryType = UITableViewCellAccessoryNone;

     ObjPatient = [allPatientDetails objectAtIndex:indexPath.row];
     cell.textLabel.text =[NSString stringWithFormat:@"%@ %@",ObjPatient.firstName,ObjPatient.lastName];
    return cell;

}

以上是在表上显示名称的代码。欢迎任何建议,谢谢

4

3 回答 3

5

要实现搜索功能,请先查看以下链接 -

https://developer.apple.com/library/ios/documentation/uikit/reference/UISearchBar_Class/Reference.html https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class /参考/NSPredicate.html

然后在您的代码中进行如下更改 -

在您的 .h 文件中声明数组 -

NSArray *filteredArray;

在 - (void)viewDidLoad 方法 -

filteredArray = allPatientDetails;

然后实现 UISearchBar 委托方法-

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    NSPredicate *predicate = [NSPredicate
                            predicateWithFormat:@"SELF.firstName contains[c] %@",
                            searchText];
    NSArray *filteredArray = [allPatientDetails filteredArrayUsingPredicate:predicate];
   [tableView reloadData];
}

并更改您现有的方法 -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString* identifier= @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    if (!cell) {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] ;

    }
    cell.accessoryType = UITableViewCellAccessoryNone;

    ObjPatient = [filteredArray objectAtIndex:indexPath.row];
    cell.textLabel.text =[NSString stringWithFormat:@"%@ %@",ObjPatient.firstName,ObjPatient.lastName];
    return cell;
}
于 2013-10-31T06:05:48.203 回答
0

对于带有自定义对象的 nspredicate 来说,可以像这样完成。

NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"SELF.firstName contains[c] %@",
                                searchText];


self.searchedMemberNameResults = [self.listedMembers filteredArrayUsingPredicate:resultPredicate];

firstName 是对象的属性

于 2013-10-31T05:56:20.760 回答
0

您可以在下面找到根据情节提要中的标签搜索项目的代码。它动态搜索;我已经对此进行了测试,并且可以正常工作。

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

        NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"job_id contains[c] %@",searchText];

        searchResultArray = [responceArray filteredArrayUsingPredicate:resultPredicate];

        [工作表重载数据];
    }
于 2016-08-09T12:07:14.773 回答