iOS,覆盖cellForRowAtIndexPath以返回自定义单元格

时间:2014-07-25 08:36:09

标签: ios objective-c uitableview

为了向我可用于识别行的单元格添加属性,我创建了一个从UITableViewCell子类化的自定义单元格。这部分似乎工作正常,但是当我尝试实现didSelectRowAtIndexPath时,我无法获取自定义单元格指针,因此无法访问该属性。我是否需要覆盖cellForRowAtIndexPath?

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

    static NSString *MyIdentifier = @"MyReuseIdentifier";

    NLSTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

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

    NSLog(@"indexPath: %ld", indexPath.row);
    NSDictionary *cellDict = [self.sql getTitleAndIdForRow:indexPath.row];

    NSArray *keys = [cellDict allKeys];
    id rowId = [keys objectAtIndex:0];
    id title = [cellDict objectForKey:rowId];

    cell.textLabel.text = title;
    cell.rowId = (NSUInteger)rowId;
    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    //This message returns a UITableViewCell, not a my custom NLSTableViewCell
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *string = [[NSString alloc] init];
    string = cell.textLabel.text;
    NSUInteger rowId = cell.rowId;
    NSLog(@"id: %ld, title: %@", rowId, string);
}

2 个答案:

答案 0 :(得分:4)

铸造怎么样?

NLSTableViewCell *cell = (NLSTableViewCell *) [tableView cellForRowAtIndexPath:indexPath];

答案 1 :(得分:1)

在你的viewDidLoad 2中要检查的东西 1.您为表格视图单元格注册了该类。 2.您在注册声明中使用自定义类。即。

[myTableView registerClass:[ YOUR_CUSTOM_CELL_CLASS class] forCellReuseIdentifier: YOUR_CUSTOM_CELL_CLASS_REUSE_ID ];

在dequeue语句中转换子类表视图单元格对我来说不起作用。

干杯!