自定义具有自己标签的表视图单元格

时间:2012-12-17 05:40:49

标签: ios uitableview

nameLabel不起作用。当我运行该应用程序时,会发生以下错误: UITableViewCell nameLabel]:无法识别的选择器发送到实例0x1fc4e090。但是如果我将nameLabel设置为textLabel,它就可以工作。

以下是我的代码:

@interface ViewController ()
{
     NSMutableArray *books;
 }
@end

- (void)viewDidLoad
{

    Book *book1 = [Book new];
    book1.name = @"The adventures of tintin";
    book1.imageFile = @"tintin.jpg";


    Book *book2 = [Book new];
    book2.name = @"Avatar";
    book2.imageFile = @"avatar.jpg";
    books = [NSMutableArray arrayWithObjects:book1, book2, nil];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{<br>
    static NSString *simpleTableIdentifier = @"BookCell";

    UITableViewCell *cell = [tableV dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    //MyBookCell *cell = [tableV dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:simpleTableIdentifier];
    }
    //if (cell == nil) {
        cell = [[MyBookCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:simpleTableIdentifier];
    }
    Book *bk = [books objectAtIndex:indexPath.row];
    cell.nameLabel.text = bk.name; (customised label)

    return cell;
}

这是自定义表格单元格的头文件

@interface MyBookCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@end

3 个答案:

答案 0 :(得分:2)

这是因为UITableViewCell没有名为nameLabel的属性。 分配textLabel.text是对的 或者您可以实现自定义单元格类,并且有适合您的字段 然后而不是

UITableViewCell *cell = [tableV dequeueReusableCellWithIdentifier:simpleTableIdentifier];

你应该致电

MyCustomCell* cell = (MyCustomCell*)[tableV dequeueReusableCellWithIdentifier];
if(cell == nil){
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell"owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

答案 1 :(得分:0)

对于UITableViewCell来说,Ther不像nameLabel这样的属性。 如果您将UITableViewCell子类化,则需要将其强制转换为您自己的自定义类,如:

YourClass *cell = (YourClass *)[tableV dequeueReusableCellWithIdentifier:simpleTableIdentifier];

同样分配:

cell = [[YourClass alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:simpleTableIdentifier];

答案 2 :(得分:0)

您应该使用以下样式加载自定义UITableViewCell。

static NSString *CellIdentifier = @"CellCustom";
CellCustom *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil] objectAtIndex:0];
}
cell.nameLabel.text = @"Text";