如何在iOS项目中继承XIB文件?

时间:2012-10-05 05:57:14

标签: iphone objective-c ios uitableview

我有一个从UITableViewCell继承的自定义表格单元格。它工作正常。

现在我必须为其他屏幕制作相同类型的单元格,几乎没有修改。我计划继承我的旧单元类以重用其设计和逻辑,但我找不到如何继承xib文件的方法。

我是否应该将所有视图从一个xib复制/粘贴到另一个xib或者是否有一种方法可以通过一些更改来扩展它?

编辑:我已经阅读了以下问题,他们声称现在不可能:

如果不可能,我们应采用什么方法有效地做到这一点?

5 个答案:

答案 0 :(得分:0)

您应该复制文件并进行必要的更改。

由于

答案 1 :(得分:0)

XIB编辑器无法以编程方式执行任何操作。最简单的路径(通常)只是将其全部移动到代码,然后从所有目标/项目中删除XIB。然后你可以继承你喜欢的子类。

作为奖励,这可以真正简化多个目标的资源管理。

将其移动到代码的替代方法是将可修改部分移动到其他实例(由单元格保持/引用)。然后控制器可以在呈现之前设置该属性。因此,如果样式化和绘图在某些方面是特殊的或可自定义的,那么只需将该逻辑移出到不依赖于XIB反序列化的类层次结构,然后将这些部分属性设置为您在nib中定义的单元格。

答案 2 :(得分:0)

如果您正在为您的问题寻找其他解决方案,那么我建议您以编程方式创建自定义单元格。

我正在逐步解释你,这会对你有所帮助。

为此,创建一个继承自UITableViewCell的类,并在tabelCell中添加所需的组件。

所以你的.h文件看起来像这样。

// -------- START ------->>

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell{

UIButton *btn1;
UIButton *btn2;
UIButton *btn3;

}

@property(nonatomic , retain) UIButton *btn1;
@property(nonatomic , retain) UIButton *btn2;
@property(nonatomic , retain) UIButton *btn3;

@end

// ------- END -------&lt;&lt;

,您的.m文件将如下所示

// -------- START -------&GT;&GT;

  #import "CustomCell.h"

  @implementation CustomCell
  @synthesize btn1, btn2, btn3;

  - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
   {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

    //----frame the components as per your project req.----       

    btn1 = [[UIButton alloc] initWithFrame:CGRectMake(1, 1, 85, 70)];
    [self.contentView addSubview:btn1];

    btn2 = [[UIButton alloc] initWithFrame:CGRectMake(100, 1, 85, 70)];
    [self.contentView addSubview:btn2];

    btn3 = [[UIButton alloc] initWithFrame:CGRectMake(195,1, 85, 70)];
    [self.contentView addSubview:btn3];
   }
    return self;
   }

   - (void)setSelected:(BOOL)selected animated:(BOOL)animated
   {
    [super setSelected:selected animated:animated];

      // Configure the view for the selected state
   }

// END --------&------- LT;&LT;

现在您已准备好在其他类中重用此自定义单元格。并且还可以根据要求修改它们。

现在在cellForRowAtIndexPath&gt;&gt;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{

static NSString *CellIdentifier = @"Cell";

CustomCell  *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (cell == nil)
{
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
}

  [cell.btN1 setImage:[UIImage imageNamed:@"YOUR IMAGE NAME"] forState:UIControlStateNormal]; // YOU CAN MAKE CHANGES HERE.

    ................// remaining logic goes here

 return cell;

 }
希望这会帮助你。

1 .Also take a look on link tutorial.

2. A Closer Look at Table View Cells

答案 3 :(得分:0)

您是否尝试过对自定义单元格视图类进行子类化?这样,您可以在所有UI组件的基类中使用IBOutlet,并且在新子类中,您可以根据新行为管理它们。这就像是对UIView或UIViewController等进行子类化。

答案 4 :(得分:0)

它发生在我身上,我做的是:

而不是子类化我创建了一个单独的UIView表,其中包含customCell,并将该视图添加为需要的子视图。我能够在customCell中使用更改customCell的UI,以了解哪个UIViewController将其添加为子视图。

我不确定这种方法有多好,但仍然是一种方式:)