0

我正在关注这种折磨:

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 数据源必须从 tableView 返回一个单元格:cellForRowAtIndexPath:

据我了解 UITableView 是为情节提要中的每个单元格循环的,它应该返回单元格。

那么,这里发生了什么,为什么单元格返回 nil,或者根本不返回?

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

4

3 回答 3

1

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

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

另外,使用这个:

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); 
于 2013-07-22T17:49:49.533 回答
0

Where is you create your cell ??

You should add after:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

such code (or something another initializer):

if (cell == nil) {
    cell = [[UITableViewCell alloc] init];   
}
于 2013-07-22T17:45:33.580 回答
-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
                ];
    }
于 2013-07-22T17:59:31.517 回答