0

我已经设置了UIViewController一个表格视图并添加了单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *identifier = nil;
    NSString *task = [self.tasks objectAtIndex:indexPath.row];
    NSRange urgentRange = [task rangeOfString:@"URGENT"];
    if (urgentRange.location == NSNotFound) {
        identifier = @"plainCell";
    } else {
        identifier = @"attentionCell";
    }
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    // Configure the cell...

    UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
    NSMutableAttributedString *richTask = [[NSMutableAttributedString alloc]
                                           initWithString:task];
    NSDictionary *urgentAttributes =
    @{NSFontAttributeName : [UIFont fontWithName:@"Courier" size:24],
      NSStrokeWidthAttributeName : @3.0};
    [richTask setAttributes:urgentAttributes
                      range:urgentRange];
    cellLabel.attributedText = richTask;

    return cell;
}

我正在尝试学习故事板并创建了这个示例代码。我没有看到或者我能够发现我在做什么错误。从昨天开始,我就一直坚持这一点,而不是理解这个问题。

我请求你的帮助,让我继续学习。

这是我正在尝试创建的示例。XCODE 项目可以从以下网址下载:

https://dl.dropboxusercontent.com/u/72451425/Simple%20Storyboard.zip

请查看代码并帮助我继续前进。

4

2 回答 2

3

您在情节提要中使用的单元格标识符是actionCellplainCell

actionCell. 不是attentionCell

在代码中使用正确的单元格标识符

if (urgentRange.location == NSNotFound) {
    identifier = @"plainCell";
} else {
    identifier = @"actionCell";
}
于 2013-08-03T21:05:10.560 回答
-3

你的问题在这里:UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

如果之前没有创建单元格,这可以返回一个 nil 单元格。因此,您需要检查它:

// Configure the cell...
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]]; //or do whatever makes sense for your new cell
}
UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
NSMutableAttributedString *richTask = [[NSMutableAttributedString alloc] initWithString:task];
NSDictionary *urgentAttributes = @{NSFontAttributeName : [UIFont fontWithName:@"Courier" size:24], NSStrokeWidthAttributeName : @3.0};
[richTask setAttributes:urgentAttributes range:urgentRange];
cellLabel.attributedText = richTask;
于 2013-08-03T21:06:37.967 回答