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”。