Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在iOS项目中继承XIB文件?_Iphone_Objective C_Ios_Uitableview - Fatal编程技术网

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

Iphone 如何在iOS项目中继承XIB文件?,iphone,objective-c,ios,uitableview,Iphone,Objective C,Ios,Uitableview,我有一个从UITableViewCell继承的自定义表格单元格。很好用 现在我必须为其他屏幕制作相同类型的单元格,只需稍加修改。我计划继承旧的cell类以重用其设计和逻辑,但我找不到继承xib文件的方法 我是否应该将所有视图从一个xib复制/粘贴到另一个xib,或者是否有一种方法可以在几乎不做更改的情况下对其进行扩展 编辑:我已经阅读了以下问题,他们声称现在不可能: 如果不可能,我们应该使用什么方法来有效地执行此操作?您应该复制文件并进行必要的更改 谢谢没有任何东西是XIB编辑器所能做的

我有一个从UITableViewCell继承的自定义表格单元格。很好用

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

我是否应该将所有视图从一个xib复制/粘贴到另一个xib,或者是否有一种方法可以在几乎不做更改的情况下对其进行扩展

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


如果不可能,我们应该使用什么方法来有效地执行此操作?

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


谢谢

没有任何东西是XIB编辑器所能做的,而您不能通过编程来做的。最简单的方法是(通常)将其全部移动到代码中,然后从所有目标/项目中删除XIB。然后,您可以根据自己的喜好创建子类

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


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

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

我正在一步一步地向你解释,这将对你有更好的帮助

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

因此您的.h文件如下所示。

//--------开始------->>

//--------完--------

- (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;

 }
希望这对你有帮助


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

我曾经遇到过这种情况,我所做的是:

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


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

在OO环境中思考时,我试图避免重复;我想你没有读过我的问题;我已经从UITableViewCell类继承了一个自定义单元格;我知道如何为tableView定制单元格;我需要一个更高层次的继承,不是直接从UITableViewCell继承,而是从我自己的自定义单元格类继承,重要的是要重用xib文件视图;
  #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
   }
- (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;

 }