0

searchDisplayControllerを実装しようとしていますが、問題があります。セルをフィルタリングし、残っているセルを選択すると、奇妙なテキストのスタックが表示されます。

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

これは、すべてのセルを1つにまとめたようなものです。

だから私の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

次のコードを参照するの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.allItemsself.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 に答える
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 に答える