嗨,我是 iphone 应用程序开发的新手,但这个问题更多的是与编码相关。我使用 tableview 来显示用户名(textLabel)和 phoneNumbers(detailtextLabel)当然使用地址簿。我将它们都存储在单独的数组中。另外,我有一个电子邮件地址存储在一个单独的数组中。并使用所有这些,我成功地能够在创建的表格视图中按排序顺序显示联系人。问题出在 searchDisplayController 的实现中。在这里,我希望能够按用户名和电子邮件 ID(两者之一)进行搜索。
因此,我使用 NSDictionary 将姓名+电子邮件存储为值(NSString 格式),其中键作为显示该联系人的行的索引。现在,我使用以下代码成功获取了所有匹配联系人的数组。
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResults = nil;
matchingContacts = nil;
NSArray *allContactValues = [allContactNamesWithEmailIDs allValues];
searchResults = (__bridge CFArrayRef)([[allContactValues sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] filteredArrayUsingPredicate:resultPredicate]);
matchingContacts = [[NSMutableArray alloc] initWithArray:(__bridge NSMutableArray*)searchResults];
匹配联系人返回所有匹配联系人姓名的数组。但是,当有两个用户具有相同的名称(相同的值 bt 不同的键)时,使用它有一个缺点,我无法将其追溯到不同的键。它会显示相同的名称和相同的电话号码两次,这将是一个问题。
创建单元格的代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if(tableView == self.searchDisplayController.searchResultsTableView){
if (farmMarkets.count>0) {
destIndex = [[[allContactNamesWithEmailID allValues] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] indexOfObject:matchingContacts[indexPath.row]]; //?? I believe this is what needs to be modified to display multiple contacts. Just don't know how.
[cell.textLabel setText:farmMarkets[destIndex]];
if (destIndex<0) {
[cell.detailTextLabel setText:@""];
}
else{
[cell.detailTextLabel setText:phoneNumbersArray[destIndex]];
}
}
}
}
有人可以给我一个代码示例,解释如何更好地实现吗?所有的想法都会有所帮助。我现在将总结一下。我想实现一个 tableView,显示带有姓名和电话号码的联系人以及顶部的搜索栏。当我使用姓名或电子邮件 ID 进行搜索时,它应该显示带有相应电话号码的姓名。