自定义单元格在UITableVIew中查找

时间:2013-07-22 17:07:54

标签: ios objective-c

我跟着这种折磨:

http://www.raywenderlich.com/32283/core-graphics-tutorial-lines-rectangles-and-gradients

它涵盖了动态表格单元的自定义,我需要使用静态表格单元格。

我已经为每个单元格提供了标识符“Cell”,正如他在教程中所做的那样,然后我将子视图控制器子类化并实现了这个:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * CellIdentifier = @"Cell";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    // START NEW
    if (![cell.backgroundView isKindOfClass:[CostumCellBackground class]]) {
        cell.backgroundView = [[CostumCellBackground alloc] init];
    }


    if (![cell.selectedBackgroundView isKindOfClass:[CostumCellBackground class]]) {
        cell.selectedBackgroundView = [[CostumCellBackground alloc] init];
    }
    // END NEW


    cell.textLabel.backgroundColor = [UIColor clearColor]; // NEW

    return cell;
}

CostumCellBackground绘制矩形。

我收到错误“UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:

据我所知,UITableView为故事板中的每个Cell循环,并且它应该返回单元格。

那么,这里有什么,为什么细胞会返回零,或根本不返回?

唯一的区别是它们是静态表,而不是原型。

3 个答案:

答案 0 :(得分:1)

如果您使用的是Storyboards和iOS6,并且您的视图控制器是UITableViewController,那么如果您的故事板中存在您的单元格标识符,您将始终获得一个单元格。检查cel == nil是一种旧方法。

您确定故事板中有一个带有“Cell”标识符的自定义单元格吗?

另外,请使用:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

如果你查看UITableView.h文件,你会发现:

// newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); 

答案 1 :(得分:0)

你在哪里创建你的细胞?

你应该添加:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

此类代码(或其他初始化程序):

if (cell == nil) {
    cell = [[UITableViewCell alloc] init];   
}

答案 2 :(得分:-1)

在方法的开头尝试:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * CellIdentifier = @"Cell";

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil){
        cell = [[UITableViewCell alloc]
                initWithStyle: UITableViewCellStyleDefault
                reuseIdentifier:CellIdentifier
                ];
    }