自定义单元格无法在UITableView中搜索结果

时间:2014-05-25 19:10:59

标签: ios uitableview uisearchbar uisearchdisplaycontroller

首先,我想告诉我,我已经研究并尝试关注像UISearchDisplayController and custom cell这样的stackoverflow链接,但问题仍然存在

我将搜索栏和搜索显示控制器集成到我的UITableView中。搜索功能正常但搜索结果单元格具有默认的白色单元格设计,而不是用于UITableView的自定义单元格设计。下面是我的代码,使搜索结果的Cell设计适应我的自定义设计。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.searchDisplayController.searchResultsTableView registerClass:[ItemCellTableViewCell class] forCellReuseIdentifier:@"Cell"];
    if(!self.document){
        [self initDocument];
    }
    self.filteredItemCatalogArray = [[NSMutableArray alloc]init];
    self.itemCatalogTableView.dataSource = self;
    self.itemCatalogTableView.delegate = self;
    [self.itemCatalogTableView reloadData];
    self.itemCatalogTableView.backgroundColor = [UIColor clearColor];
    self.itemCatalogTableView.opaque = NO;
    self.itemCatalogTableView.bounces = YES;
    self.itemCatalogTableView.backgroundView = nil;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        //cell fields customization
        cell.backgroundColor = [UIColor clearColor];
        cell.opaque = NO;
        return cell;
    }
    else
    {
        ItemCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        //cell fields customization
        cell.backgroundColor = [UIColor clearColor];
        cell.opaque = NO;
        return cell;
    }
}

我在这里缺少什么?

已编辑:

在搜索结果的if块中,我将tableview更改为self.tableview,并获取正确的自定义单元格。但它需要不正确的高度,因此搜索结果的行重叠

4 个答案:

答案 0 :(得分:5)

在搜索结果的if块中,我将tableview更改为self.tableview,并获得正确的自定义单元格。但它需要不正确的高度,因此搜索结果的行重叠

纠正高度问题我在viewdidload中添加了以下行

  

self.searchDisplayController.searchResultsTableView.rowHeight =   self.tableView.rowHeight;

答案 1 :(得分:1)

1)如果您的单元格正在使用xib文件,则应添加到viewDidLoad(或在tableView委托之前调用的其他方法)

[yourTableView registerNib:[UINib nibWithtName:@"your_nibName" bunde:yourBunde] forCellReuseIdentifier:@"yourIdentifier"]

您还应该为自定义单元格使用注册标识符:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    static NSString *CustomCellIdentifier  = @"yourIdentifier";
    if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        // UITableViewCell customization
      return cell;
    }
    else
    {
        ItemCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier forIndexPath:indexPath];
          if (!cell)
                cell = [[ItemCellTableViewCell alloc] initWithStyle:yourPreferedStyle reuseIdentifier:CustomCellIdentifier] // or other custom initialization

        //put cell fields customization here
        return cell;
    }
}

答案 2 :(得分:0)

如果您的自定义单元格是使用NIB设计的,请尝试使用

[self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"YourCellNibName" bundle:Nil] forCellWithReuseIdentifier:@"Cell"];

答案 3 :(得分:0)

你必须获得tableView的引用然后才能进入 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomTableCell"; MyCell *cell = (MyCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; ... }