我有UITableView是故事板。 我尝试在Xib中创建UITableViewCell并在UITableView中注册它:
-(void)viewDidLoad{
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"FlipperTableViewCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"fliperCell"];
}
效果很好。
但是这个单元格内部必须有一个视图,并在第一个视图上的按钮按下时将其翻转到另一个视图。
我在同一个xib中创建另外两个视图。 File的所有者是FliperTableViewCell类。第一个视图类是FliperTableViewCell。
但现在无法弄清楚如何在第一个视图(UITableViewCell)中添加第二个视图(UIView)作为子视图,该视图由表视图加载。 我尝试从loadNibNamed:获得第二个视图,但它变成了无限循环。
@implementation FlipperTableViewCell
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]){
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil] objectAtIndex:1]];
}
return self;
}
从第一个视图加载后,从同一个xib获取第二个视图并将其添加为子视图的另一种方法是什么?
答案 0 :(得分:0)
[self.tableview registerNib:nib forCellReuseIdentifier:@"FlipperTableViewCell"];
到
[self.tableview registerClass:[FlipperTableViewCell class] forCellReuseIdentifier:@"FlipperTableViewCell"];
然后从xib中删除第一个视图并重写FlipperTableViewCell以在代码中启动
#import "FlipperTableViewCell.h"
@interface TableViewCell ()
@property (nonatomic, strong) UIView *firstView;
@property (nonatomic, strong) UIView *secondView;
@end
@implementation FlipperTableViewCell
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil];
self.firstView = nibObjects[0];
self.secondView = nibObjects[1];
[self.contentView addSubview:self.firstView];
self.selectionStyle = UITableViewCellSelectionStyleNone;
}
return self;
}
// this is for test changing views
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
if (self.contentView.subviews[0] == self.firstView){
[self.firstView removeFromSuperview];
[self.contentView addSubview:self.secondView];
}
else{
[self.secondView removeFromSuperview];
[self.contentView addSubview:self.firstView];
}
}
@end