UISearchDisplayController中的自定义UITableViewCell

时间:2013-05-13 10:18:20

标签: ios uitableview uisearchdisplaycontroller

我有UITableViewUISearchDisplayController。 UITableViewCell是一个自定义单元格,其中 rowHeight = 30

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    UILabel *lbTitle;
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        [cell setSelectionStyle:UITableViewCellSelectionStyleGray];

        lbTitle = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, tableView.rowHeight)];
        [lbTitle setTag:1];
        [lbTitle setFont:[UIFont fontWithName:@"Sinhala Sangam MN" size:14]];
        //[lbTitle setTextAlignment: NSTextAlignmentCenter];
        [cell addSubview:lbTitle];
    }
    else {
        lbTitle = (UILabel *)[cell viewWithTag:1];
    }
}

如何在UISearchDisplayController中应用此单元格样式。因为当搜索“活动”时,UISearchDisplayController的单元格看起来像是基本的。

list filtered list

由于

在MarkM的回答(Is there a way to customize UISearchDisplayController cell)的帮助下

已解决

static NSString *normalCellReuseIdentifier = @"ANormalCell";
static NSString *searchCellReuseIdentifier = @"ASearchCell";

UITableViewCell* cell = nil;
UILabel *lbTitle;
if (tableView != self.searchDisplayController.searchResultsTableView) {
    cell = [tableView dequeueReusableCellWithIdentifier:normalCellReuseIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:normalCellReuseIdentifier];
        [cell setSelectionStyle:UITableViewCellSelectionStyleGray];

        lbTitle = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, tableView.rowHeight)];
        [lbTitle setTag:1];
        [lbTitle setFont:[UIFont fontWithName:@"Sinhala Sangam MN" size:14]];
        //[lbTitle setTextAlignment: NSTextAlignmentCenter];
        [cell addSubview:lbTitle];
    }
    else lbTitle = (UILabel *)[cell viewWithTag:1];
} else {
    tableView.rowHeight = 30;
    cell = [tableView dequeueReusableCellWithIdentifier:searchCellReuseIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:searchCellReuseIdentifier];
        [cell setSelectionStyle:UITableViewCellSelectionStyleGray];

        lbTitle = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, tableView.rowHeight)];
        [lbTitle setTag:1];
        [lbTitle setFont:[UIFont fontWithName:@"Sinhala Sangam MN" size:14]];
        //[lbTitle setTextAlignment: NSTextAlignmentCenter];
        [cell addSubview:lbTitle];
    }
    else lbTitle = (UILabel *)[cell viewWithTag:1];
}

5 个答案:

答案 0 :(得分:0)

UISearchDisplayController的实例上(假设它名为myUISearchDisplayController),调用myUISearchDisplayController.searchResultsTableView.rowHeight = 30;

答案 1 :(得分:0)

UISearchDisplayController控制表格以显示结果时,它会调用

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

要显示单元格,所以您唯一需要做的就是检测displayController何时调用此方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([tableView isMemberOfClass:[UITableView class]])
    //This is the table view
    else
    //This is the display controller

对委托/数据源的其余方法执行相同操作,以根据需要实现搜索结果单元格(例如,高度或行数)

答案 2 :(得分:0)

搜索显示控制器有自己的表格,在其中显示正在搜索的数据。您可以使用此代码设置高度 -

SDC.searchResultsTableView.rowHeight = 30;//whatever you want 

SDC是UISearchDisplayController

的实例

答案 3 :(得分:0)

使用searchResultsTableView调用所有相同的UITableView委托方法。有关更详细的说明,请参阅以下答案。

Is there a way to customize UISearchDisplayController cell

答案 4 :(得分:0)

如果行高是唯一要改变的。使用searchResultsTableView.rowHeight进行设置仅适用于第一次。点击取消并使用新搜索键搜索会忽略自定义rowHeight。 (iOS 6.1,xcode 4.6.1)使用以下内容。

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
    tableView.rowHeight = 50.0;
}