表视图不显示自定义单元格

时间:2012-04-19 10:57:39

标签: objective-c ios

我有一个视图控制器,当单击一个按钮时会显示一个表视图控制器。表视图委托一切正常,表视图显示正常,但在ellForRowAtIndexPath:委托方法中,单元格被实例化并返回,但它没有正确显示。

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

    static NSString *CellIdentifier = @"alrededor";

    alrededorCell *cell = [tableView 
                           dequeueReusableCellWithIdentifier:CellIdentifier];

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


    NSDictionary *categoria = [[NSDictionary alloc] initWithDictionary: [_categoriasArray objectAtIndex:indexPath.row]];

    NSLog(@"categoria %@", categoria);

    cell.title.text = [categoria valueForKey:@"title"];

    return cell;

}

非常感谢

2 个答案:

答案 0 :(得分:2)

为什么要像这样创建你的手机?

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

如果它是您自己的自定义单元格,为什么要使用UITableViewCellStyleDefault?

答案 1 :(得分:1)

如果要加载的单元格是UITableViewCell的子类,并且您已使用界面构建器构建单元格,则必须执行以下操作。

在nib文件中删除创建时的视图,添加UITableViewCell并将其类更改为alrededorCell。更改单元格类而不是文件的所有者。当您链接按钮,标签等。一定要将它们链接到单元格而不是文件所有者。同时将单元格uniqueIdentifier设置为alrededor。

在cellForRowAtIndexPath

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

    static NSString *CellIdentifier = @"alrededor";

    alrededorCell *cell = [tableView 
                       dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"nibName" owner:nil options:nil];
        for (alrededorCell *view in xib) {
            if ([view isKindOfClass:[alrededorCell class]]) {
                cell = view;
            }
        }
    }


    NSDictionary *categoria = [[NSDictionary alloc] initWithDictionary: [_categoriasArray objectAtIndex:indexPath.row]];

    NSLog(@"categoria %@", categoria);

    cell.title.text = [categoria valueForKey:@"title"];

    return cell;

}