我想更改我的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
中建立。