我有班级
ParentCell extends UITableViewCell
ChildCell extends ParentCell
ParentCell有单独的XIB。在子单元格中,我正在创建父父母XIB并将其仅添加到一个视图中。但我无法为此按钮添加操作。因为即使我正在为ChildCell创建实例,该实例也返回ParentCell的实例
因为我使用loadNibNamed来获取带有IBOutlet连接的XIB。
ParentCell类中的@ initWithStyle方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self = [[NSBundle mainBundle] loadNibNamed:@"ParentCell" owner:self options:nil]
[0];
}
return self;
}
ChildCell类中的@ initWithStyle方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.button=[[UIButton alloc] init];
[self.contentView addSubview:button];
}
return self;
}
@视图控制器
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ChildCell ";
ChildCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell=[[ChildCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
NSLog(@"Cell : %@", cell); //this have instance of ParentCell instead of ChildCell
}
}
现在暂时用这种方法解决
ParentCell类中的@ initWithStyle方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
NSBundle *mainBundle = [NSBundle mainBundle];
NSArray *views = [mainBundle loadNibNamed:@"ParentCell"
owner:self
options:nil];
//Here we are linking the view with appropriate IBOutlet by their tag
self.lblTitle=[views[0] viewWithTag:100];
self.lblContent=[views[0] viewWithTag:200];
}
return self;
}
ChildCell类中的@ initWithStyle方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.button=[[UIButton alloc] init];
[self.contentView addSubview:button];
}
return self;
}
但是我不知道这是正确的方法,否则我们还有其他更好的方法。
最佳答案
您应该在UITableView类的viewDidLoad上使用registerNib:forCellReuseIdentifier:
方法。
static NSString *parentCellIdentifier = @"parentCellIdentifier";
static NSString *childCellIdentifier = @"childCellIdentifier";
[self.tableView registerNib:[UINib nibWithNibName:@"ParentCell" bundle:nil] forCellReuseIdentifier:parentCellIdentifier];
[self.tableView registerNib:[UINib nibWithNibName:@"ChildCell" bundle:nil] forCellReuseIdentifier:childCellIdentifier];
(不要忘记在XIB文件中设置适当的ReuseIdentifier)
这是最佳做法,您可以摆脱initWithStyle实现。