Ios 一个UIView子类,两个不同的.xib文件
如果我有以下文件:Ios 一个UIView子类,两个不同的.xib文件,ios,uitableview,ipad,uiview,xib,Ios,Uitableview,Ipad,Uiview,Xib,如果我有以下文件: MyTableViewCell.h MyTableViewCell.m MyTableViewCell.xib MyTableViewCell~ipad.xib 在IB中,如果我将单元格指定为类类型“MyTableViewCell”,那么在ipad设备上如何从MyTableView~ipad.xib加载它?我试过这个: @implementation MyTableViewCell - (id)initWithCoder:(NSCoder *)aDecoder {
MyTableViewCell.h
MyTableViewCell.m
MyTableViewCell.xib
MyTableViewCell~ipad.xib
在IB中,如果我将单元格指定为类类型“MyTableViewCell”,那么在ipad设备上如何从MyTableView~ipad.xib加载它?我试过这个:
@implementation MyTableViewCell
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
if (IPAD) {
self = [UIView viewWithNib:@"MyTableViewCell~ipad"];
}
else {
//iphone
}
}
return self;
}
这显然是错误的,并导致了一个无限循环,但给出了我试图做什么的想法。如果我在ipad上,我希望为我指定为MyTableViewCell的任何单元格加载MyTableViewCell~ipad.xib。我想如果我把它命名为~ipad,它应该可以自动工作,但这似乎只适用于视图控制器。您必须在TableView数据源函数中加载单元格。您可以这样做:
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"MyTableViewCell";
MyTableViewCell* cell = (MyTableViewCell*) ([tableView dequeueReusableCellWithIdentifier:cellIdentifier]);
if(!cell){
if(UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPhone){
//iPhone
[[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
}
else{
//iPad
[[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell~ipad" owner:self options:nil];
}
cell = _aCell;
_aCell = nil;
}
//Continue with initialization of your UI elements
}
这样,单元格的特定初始化由单元格的所有者类(通常是tableViewController)处理。它还可以防止像您发布的那样出现无限循环的情况
要使其正常工作,必须将其添加到MyTableViewController.h中
@property (retain, nonatomic) IBOutlet MyTableViewCell* aCell;
此外,还必须将MyTableViewCell XIB中的“文件所有者”类设置为tableViewController类(例如MyTableViewController)。然后将MyTableViewCell XIBs中的UITableViewCell元素链接到文件所有者中的aCell
属性
记住让TableViewController响应UITableViewDelegate和UITableViewDatasource。此外,您还必须为tableViewDelegate/Datasource实现以下功能:
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
希望这能有所帮助。谢谢你的建议。但是,如果我在表视图中使用静态单元格呢?我仍然确信在MyTableViewCell类中有一些需要设置的IBOutlet属性(这就是为什么要首先设置MyTableViewCell)。如果没有,这应该仍然有效。所有这些代码告诉iPad是——对于我需要在表中创建的每个单元格,iPhone使用“MyTableViewCell”,iPad使用“MyTableViewCell~iPad”。