自定义 UISearchBar 结果单元格

Posted

技术标签:

【中文标题】自定义 UISearchBar 结果单元格【英文标题】:Customize UISearchBar Results Cell 【发布时间】:2014-03-17 11:41:14 【问题描述】:

我正在尝试显示自定义 UISearchBar 结果单元格。我创建了一个自定义 UITableViewCell 来显示信息,但我想自定义 UISearchBar 结果。

我的课堂上有这段代码:

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

    static NSString *CellIdentifier = @"PodsCell";
    LinhaPod *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    
        cell = [[LinhaPod alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    

    if (isSearching && [self.searchResults count])
    
        NSString *texto = [self.searchResults objectAtIndex:indexPath.row];
        NSArray *arrTexto = [texto componentsSeparatedByString:@"#"];
        cell.titulo.text = arrTexto[6];
        cell.dataPod.text = [NSString stringWithFormat:@"%@ - %@", arrTexto[1], [arrTexto[3] stringByReplacingOccurrencesOfString:@"." withString:@"'"]];
        [cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];
    
    return cell;

此代码不起作用。我用"cell.textLabel.text = @"test";" 进行了测试并工作了。

我正在使用搜索栏和搜索显示控制器。

这是我的UITableViewCell

【问题讨论】:

【参考方案1】:

您是否已将 UILabel 添加到您的 UITableViewCell 中?你在 LinhaPod.m 中的 initWithStyle 应该看起来像下面的这个 sn-p。 (假设您没有为此自定义单元格使用 xib 文件)

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 

        _dataPod = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 160, 44)];
        [self addSubview:_dataPod];

        _titulo = [[UILabel alloc]initWithFrame:CGRectMake(160, 0, 160, 44)];
        [self addSubview:_titulo];

    
    return self;

当然,在你的 LinhaPod.h 中你也会有

@interface LinhaPod : UITableViewCell

@property(nonatomic) UILabel *titulo;
@property(nonatomic) UILabel *dataPod;

【讨论】:

是...1 个图像和 2 个标签...我没有使用 xib 文件,并且在 LinhaPod.m 中没有任何内容(默认代码)...我在 LinhaPod 中只有变量.h 那么你应该将它们添加到你的视图中,在initWithStyle方法的一个好地方添加它们。您可以更改框架以将元素放置在您喜欢的任何位置。 我想补充一点,如果您为单元格使用自定义 nib 文件,则在调用 cellForRowAtIndexPath 方法之前,您需要在 viewDidLoad 方法中注册 nib 文件,否则您将不会无法使用您的自定义单元格。【参考方案2】:
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView

    [tableView registerClass:[MCSelectCategoryTableViewCell_iPhone class] forCellReuseIdentifier:@"selectCategoryCell"];

如果您想在 searchDisplayController 的 tableView 中使用自定义单元格,您可以通过在 searchDisplayController.searchDisplayTableView 中像这样注册来注册 StoryBoard 的任何 UITableView 子类。

【讨论】:

以上是关于自定义 UISearchBar 结果单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何使searchResultsTableView使用自定义单元格而不是默认单元格[重复]

UISearchBar的外观自定义,打造你的搜索框

UISearchBar的外观自定义,打造你的搜索框

UISearchBar 没有更新

未在自定义 UISearchBar 中获取过滤器数据

iPhone:滚动 UITableView 多达 60 多个自定义单元格时应用程序崩溃