我想更改我的UITableView单元的字体大小和颜色等。我已经在Xcode中设计了自定义单元格,并使所有功能正常运行。

首先,我将代码发布在这里:
UITableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView registerClass:MainCategoryTableViewCell.class forCellReuseIdentifier:@"MainCategoryCell"];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MainCategoryCell";
    MainCategoryTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    return cell;
}


和我的自定义单元格:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.title.font = [Theme tableCellTitleFont];
        self.title.textColor = [Theme tableCellTitleColor];

        self.subcategories.font = [Theme tableCellSubTitleFont];
        self.subcategories.textColor = [Theme tableCellSubTitleColor];

        self.costs.font = [Theme tableCellValueFont];
        self.costs.textColor = [Theme tableCellValueColor];
    }
    return self;
}


我现在很困惑此出队的工作方式:
据我了解,如果我在viewDidLoad中注册该类,则在没有可重用的单元格时,仅调用该单元格的initWithStyle方法。如果有一个单元可以重复使用,它将被使用。我在其他代码段中看到了很多if(cell == nil)调用,但这真的有必要吗?我以为registerClass方法可以解决这个问题?

此刻,我的单元格将完全显示为空。在我注册课程之前,所有工作都可以进行,但是initWithStyle未被调用。

完成cellForRowAtIndexPathMethod

#pragma mark Delegate methods
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MainCategoryCell";
    MainCategoryTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    MainCategory *mainCategory = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.title.text = mainCategory.name;
    cell.subcategories.text = [NSString stringWithFormat:@"%i subcategories", [[mainCategory getNumberOfSpendingCategories] integerValue]];
    cell.costs.text = [[mainCategory getMonthlyCostsOfAllSpendingCategories] getLocalizedCurrencyString];
    if(!mainCategory.icon){
        cell.icon.image = [UIImage imageNamed:@"DefaultIcon.png"];
    } else {
        cell.icon.image = [UIImage imageNamed:mainCategory.icon];
    }

    if(!mainCategory.color){
        cell.backgroundColor = [PresetColor colorForPresetColor:PresetColorsWhite];
    } else {
        cell.backgroundColor = [PresetColor colorForPresetColor:(PresetColors)[mainCategory.color intValue]];
    }

    cell.cellBackground.image = [[UIImage imageNamed:@"content-bkg"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)];

    return cell;
}

最佳答案

如果您在xib / storyboard文件中为表格视图将单元格定义为“原型单元格”,则根本不必注册它。如果自定义单元格位于单独的nib文件中,请使用registerNib而不是registerClass注册自定义单元格。例如:

[self.tableView registerNib:[UINib nibWithNibName:@"MainCategoryTableViewCell" bundle:nil]
      forCellReuseIdentifier:@"MainCategoryCell"];


对于从nib文件实例化的单元,将调用initWithCoder,而不是initWithStyle

要配置自定义单元的所有插座,请覆盖awakeFromNib。连接是
尚未在initWithCoder中建立。

09-05 10:00