使用故事板和子类自定义UITableViewCell

时间:2013-11-29 10:55:09

标签: ios uitableview storyboard subclass

我创建了UITableViewCell的子类,并将其称为DCCustomCell。这是DCCustomCell.h文件。

#import <UIKit/UIKit.h>

@interface DCCustomCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) IBOutlet UILabel *date;
@property (weak, nonatomic) IBOutlet UILabel *price;

@end

所有礼节都与我iPhone.storyboard文件中的元素正确连接。 我还在iPhone.storyboard中选择了tableViewCell,并将我的单元格标识符设置为“CustomCell”,将类设置为DCCustomCell

这是UITableViewController的viewDidLoad方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    [self.tableView registerClass:[DCCustomCell class] forCellReuseIdentifier:@"CustomCell"];

    // Do any additional setup after loading the view, typically from a nib.
}

这是tableView:cellForRowAtIndexPath:方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"CustomCell";

    DCCustomCell *cell = (DCCustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];

    NSLog(@"%@" ,cell);

    cell.imageView.image = [UIImage imageNamed:@"info_button.png"];
    cell.title.text = @"Hello!";
    cell.date.text = @"21/12/2013";
    cell.price.text = @"€15.00";

    return cell;
}

问题是imageView设置正确,但所有标签都是空白的。如果我将imageView属性名称更改为例如eventImageView,则不会设置图像。 这是结果:

enter image description here

我无法弄清楚如何解决这个问题。

编辑:如果我删除

[self.tableView registerClass:[DCCustomCell class] forCellReuseIdentifier:@"CustomCell"];
来自viewDidLoad

似乎都有效。为什么呢?

4 个答案:

答案 0 :(得分:9)

正如您所注意到的,当您删除

时它会起作用
[self.tableView registerClass:[DCCustomCell class] forCellReuseIdentifier:@"CustomCell"];

如果您使用dequeueReusableCellWithIdentifier:indexPath:并且尚未在该单元格的身份检查器中设置自定义类,则只需执行此操作。如果您使用registerClass: forCellReuseIdentifier,则会使用initWithStyle:reuseIdentifier:而非initWithCoder:初始化单元格,从而搞砸了您在故事板中所做的连接。

答案 1 :(得分:1)

您是否将控件绑定到IBOutlet? 您可以尝试直接在Storyboard中将DCCustomCell设置为UITableviewCell的类。 而且你需要在单元格中设置带控件的出口

答案 2 :(得分:0)

尝试:

if (cell == null) {
    //create and initialize cell
}

之后

DCCustomCell *cell = (DCCustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];

答案 3 :(得分:0)

首先检查您的插座是否已连接所有标签&amp;写下这个:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *identifier = @"CustomCell";

        DCCustomCell *cell = (DCCustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DCCustomCell" owner:self options:nil];

            cell = [nib objectAtIndex:0];
        }
        NSLog(@"%@" ,cell);

        cell.imageView.image = [UIImage imageNamed:@"info_button.png"];

        cell.title.text = @"Hello!";

        cell.date.text = @"21/12/2013";

        cell.price.text = @"€15.00";

        return cell;
    }