0

我正在尝试实现 searchDisplayController 但我遇到了问题。一旦我过滤了单元格,当我选择剩余的单元格时,我会得到一堆奇怪的文本:

http://postimage.org/image/4fswe8t8n/

这就像把我所有的牢房合二为一。

所以有我的 cellForRowAtIndexPath 方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MFriendCell";

UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil)  {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

if(tableView == self.tableView) {
    UILabel *nameLabel = (UILabel *)[cell viewWithTag:201];
    nameLabel.text = [self.allItems objectAtIndex:indexPath.row];
}
else if(tableView == self.searchDisplayController.searchResultsTableView) {
    UILabel *labelName = [ [UILabel alloc ] initWithFrame:CGRectMake(50, 0.0, 150.0, 43.0) ];
    labelName.text = [self.searchResults objectAtIndex:indexPath.row];

    [cell addSubview:labelName];
}
return cell;
}

我的过滤器:

- (void)filterContentForSearchText:(NSString*)searchText
                         scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"SELF contains[cd] %@",
                                searchText];

self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate];
}

如果您需要其他任何东西,请询问:)

4

2 回答 2

1

您可以像这样在 tableView 中制作标签

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MFriendCell";

    UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:201];

    if(tableView == self.tableView)
    {
       nameLabel.text = [self.allItems objectAtIndex:indexPath.row]; 
    }

    else if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        labelName.text = [self.searchResults objectAtIndex:indexPath.row];
    }
    return cell;
}
于 2012-12-06T13:23:07.037 回答
1

nameLabel只需像下面的代码一样添加单元格labelName..

if(tableView == self.tableView) {
    UILabel *nameLabel = (UILabel *)[cell viewWithTag:201];
    nameLabel.text = [self.allItems objectAtIndex:indexPath.row];
    [cell addSubview:nameLabel]; ///YOU ARE Not add This Lable so Add this lable also
}
else if(tableView == self.searchDisplayController.searchResultsTableView) {
    UILabel *labelName = [ [UILabel alloc ] initWithFrame:CGRectMake(50, 0.0, 150.0, 43.0) ];
    labelName.text = [self.searchResults objectAtIndex:indexPath.row];

    [cell addSubview:labelName];
}

在你的方法中,当你在时,你didSelectRowAtIndexPath只取数组的值self.allItems而不是数组self.searchResultssearchResultTableView

试试这个代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;{
     if(tableView == self.tableView) {
         NSLog("\n Normal Table View Selected cell ==> %@",[self.allItems objectAtIndex:indexPath.row]);

    }
    else if(tableView == self.searchDisplayController.searchResultsTableView) {
           NSLog("\n Search TableView Selected cell ==> %@",[self.searchResults objectAtIndex:indexPath.row];);


    }
}

并且也在numberOfRowsInSection方法设置行中,如下所示......

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(tableView == self.tableView) {
             return [self.allItems count];

        }
        else{
               return [self.searchResults count];    
        }
}

我希望这可以帮助你...

于 2012-12-06T12:33:36.467 回答