包含自定义单元格的UITableView的UISearchBar =>空白细胞

时间:2013-12-11 13:25:36

标签: ios iphone objective-c uitableview uisearchbar

  • 我有一个包含自定义单元格的UITableView。一切正常。但之后,我决定添加一个searchBar以便...搜索!

  • 所以,我在我的xib文件中的UITableView下的“Object Library”中添加了“搜索栏和搜索显示控制器”。 p>

  • 我为自定义单元格创建了一个特定的类:

    “CustomCell.h”

    @class CustomCell;
    
    @interface CustomCell : UITableViewCell
    {
    }
    
    @property (weak, nonatomic) IBOutlet UILabel *lblDate;
    @property (weak, nonatomic) IBOutlet UILabel *lblAuteur;
    
    @end
    

    “CustomCell.m”

    no interesting stuff
    

    “CustomCell.xib”

    enter image description here

  • “Event”类:

    @interface Event : NSObject
    {
    }
    
    @property (strong, nonatomic) NSString *desc;
    @property (strong, nonatomic) NSString *dateCreation;
    
    @end
    
  • 包含 UITableView UISearchBar 的视图:

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellIdentifier = @"cell";
    
        // Determinate the current event
        Event *currentEvent;
        if (tableView == self.searchDisplayController.searchResultsTableView)
            currentEvent = [filteredArray objectAtIndex:indexPath.row];
        else
            currentEvent = [notFilteredArray objectAtIndex:indexPath.row];
    
        CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
        if(cell == nil)
            cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    
        cell.lblAuteur.text = [currentEvenement desc];
        cell.lblDate.text = [currentEvenement dateCreation];
    
        return cell;
    }
    
  • 好的,现在我们可以解决我的问题。加载tableView后,自定义单元格显示良好。但是如果我使用 SearchBar

    1. 如果某个事件的desc属性等于“foo”,并且我在 SearchBar 中输入“bar”,我获取“无结果”消息。这很正常。
    2. 如果某个事件的desc属性等于“foo”,并且我在 SearchBar 中输入“foo”,单元格正在显示,但没有内容!我只是看到了单元格的边框,而 lblDate lblAuteur 等于 nil

为什么我这样做?非常感谢您的帮助......我确切地说 filteredArray notFilteredArray 已正确填充(我多次检查过)。这意味着搜索机制运作良好。

3 个答案:

答案 0 :(得分:7)

经过多次搜索" (双关语)我发现了这个问题。

当你使用原型单元格引用tableview时,你不能依赖传入的tableview,因为有时候tableview是没有原型单元格的搜索表视图。

所以不是......

HomeTabCell *cell = (HomeTabCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

替换" tableview"以上与原型单元格的表视图直接连接

HomeTabCell *cell = (HomeTabCell *)[self.HomeTableView dequeueReusableCellWithIdentifier:CellIdentifier];

希望这有帮助!

答案 1 :(得分:0)

检查这些设置,如果没有

self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.searchResultsDataSource = self;

试试这个,

答案 2 :(得分:0)

对于寻求解决此问题的人感到抱歉... 我无法修复它,主承包商不再需要这个功能,所以我放弃了。