如何为不同的 UITableView 部分使用不同的 table 视图单元格 class
How to use different table view cell class for different UITableView sections
我能做到吗?
if (indexpath.section == 0) {
// Use Class 1
} else if (indexpath.section == 1) {
// Use Class 2
}
我试过了但没用
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
OneTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"One" forIndexPath:indexPath];
if( cell == nil){
cell = [[OneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"One"];
}
cell.oneLabel.text = @"HAHAHA";
return cell;
}else{
TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Two" forIndexPath:indexPath];
if( cell == nil){
cell = [[TwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Two"];
}
cell.twoLabel.text = @"HEHEHE";
return cell;
}
}
从您显示的代码来看,您的 oneLabel
和 twoLabel
从未被初始化。如果您想快速修复,可以将它们都替换为 textLabel
。内容如下,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
OneTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"One" forIndexPath:indexPath];
if( cell == nil){
cell = [[OneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"One"];
}
cell.textLabel.text = @"HAHAHA"; // Modified
return cell;
} else {
TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Two" forIndexPath:indexPath];
if( cell == nil){
cell = [[TwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Two"];
}
cell.textLabel.text = @"HEHEHE"; // Modified
}
}
您将能够在 table 视图中看到两个不同部分的不同文本。而且它们确实是不同的 TableviewCell
classes。
然而,如果你想为不同的 UITableViewCell
使用不同的标签,那么你必须确保它们在某处以某种方式被初始化。例如,您可以覆盖自定义 table 视图单元格中的默认 UITableviewCell
初始值设定项。例如,在您的 OneTableViewCell.m
文件中,在 @implementation
和 @end
之间添加以下内容。在这种情况下,您可以在 UITableView
class 中使用您的原始代码。
@implementation OneTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if ( self ) {
_oneLabel = [[UILabel alloc] init];
[self.view addSubView:self.oneLabel];
}
return self;
}
@end
我能做到吗?
if (indexpath.section == 0) {
// Use Class 1
} else if (indexpath.section == 1) {
// Use Class 2
}
我试过了但没用
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
OneTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"One" forIndexPath:indexPath];
if( cell == nil){
cell = [[OneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"One"];
}
cell.oneLabel.text = @"HAHAHA";
return cell;
}else{
TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Two" forIndexPath:indexPath];
if( cell == nil){
cell = [[TwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Two"];
}
cell.twoLabel.text = @"HEHEHE";
return cell;
}
}
从您显示的代码来看,您的 oneLabel
和 twoLabel
从未被初始化。如果您想快速修复,可以将它们都替换为 textLabel
。内容如下,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
OneTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"One" forIndexPath:indexPath];
if( cell == nil){
cell = [[OneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"One"];
}
cell.textLabel.text = @"HAHAHA"; // Modified
return cell;
} else {
TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Two" forIndexPath:indexPath];
if( cell == nil){
cell = [[TwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Two"];
}
cell.textLabel.text = @"HEHEHE"; // Modified
}
}
您将能够在 table 视图中看到两个不同部分的不同文本。而且它们确实是不同的 TableviewCell
classes。
然而,如果你想为不同的 UITableViewCell
使用不同的标签,那么你必须确保它们在某处以某种方式被初始化。例如,您可以覆盖自定义 table 视图单元格中的默认 UITableviewCell
初始值设定项。例如,在您的 OneTableViewCell.m
文件中,在 @implementation
和 @end
之间添加以下内容。在这种情况下,您可以在 UITableView
class 中使用您的原始代码。
@implementation OneTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if ( self ) {
_oneLabel = [[UILabel alloc] init];
[self.view addSubView:self.oneLabel];
}
return self;
}
@end