2

我有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 的单元格看起来很基本。

列表 过滤列表

谢谢

在MarkM的回答的帮助下解决(有没有办法自定义 UISearchDisplayController 单元格):

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];
}
4

5 回答 5

0

使用 searchResultsTableView 调用所有相同的 UITableView 委托方法。请参考以下答案以获得更详细的解释。

有没有办法自定义 UISearchDisplayController 单元格

于 2013-05-13T12:40:01.897 回答
0

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

于 2013-05-13T10:34:43.437 回答
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

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

于 2013-05-13T10:35:40.487 回答
0

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

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

其中 SDC 是UISearchDisplayController

于 2013-05-13T10:37:28.843 回答
0

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

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
    tableView.rowHeight = 50.0;
}
于 2013-08-21T10:50:27.610 回答