代码之家  ›  专栏  ›  技术社区  ›  Hadi.M

筛选/搜索NSMutabbleDictionary

  •  0
  • Hadi.M  · 技术社区  · 11 年前

    我有一个NSMutabbleDictionary(PerosnsListSections)和一个类名Persons

    NSMutable字典:

    • 键是像“a,b,m…”这样的字母
    • 值为NSMutableArray ->NSMutableArray具有Person类的对象

    人员类别: @属性(赋值,非原子)NSInteger pid; @属性(强,非原子)NSString*name;

    现在我在UITableView中显示了PerosnsListSections,如图所示

    enter image description here

    我想实现的是,当用户首先在搜索栏中键入时,我必须过滤第一个字母的部分,然后过滤该部分下的名称。

    对不起,我的英语不好

    1 回复  |  直到 11 年前
        1
  •  1
  •   matehat    11 年前

    您可以首先通过以下操作在字典中选择正确的数组:

    NSString *firstLetter = [searchString substringWithRange:(NSRange){0,1}];
    NSArray *people = PersonsListSection[firstLetter];
    

    然后你可以使用 NSPredicates :

    NSPredicate *namesBeginningWithKeyword = [NSPredicate predicateWithFormat:@"(name     BEGINSWITH[cd] $letter)"];
    NSArray *filteredPeople = [people filteredArrayUsingPredicate:[namesBeginningWithKeyword predicateWithSubstitutionVariables:@{@"letter": searchString}]]);
    

    但是,如何在表视图的内容中反映这一点是另一个问题。

    1. 通常,您希望视图控制器成为UISearchBar的代理,并使用 – (void)searchBar:textDidChange: 委托方法。
    2. 在那里,您可以调用表视图 - reloadData 方法,因此它尝试重新计算其内容,调用其所有dataSource方法,如 - numberOfSectionsInTableView: 等等
    3. 在这些方法中,依次检查是否在搜索栏中输入了一些文本,并使用上面的提示返回正确的部分/单元格。