1

直到现在,我正在做这样的事情:

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

        NSArray *nibsArray = [[NSBundle mainBundle] loadNibNamed:@"BOAFormCell" owner:self options:nil];
        self = nibsArray[0];
        self.selectionStyle = UITableViewCellSelectionStyleNone;
        self.valueTextLabel.numberOfLines = 2;
    }
    return self;
}

这显然会导致内存泄漏。

如果我将加载代码放在 cellForRowAtIndexPath 中,那么它将使 ViewController 成为 xib 的所有者。它会在 VC 中寻找出口。

我已经在很多 ViewController 中重复使用了该单元格。

我想避免这种泄漏,但我不希望所有这些 VC 成为 xib 的个人所有者并在那里实现 IBActions 并在其中拥有 Outlets 的属性。

我应该创建一个静态方法,从 xib 加载单元格并将其返回给我吗?但是我将如何使对象成为 xib 的所有者?

4

3 回答 3

0

在您的 Tableview 中,您可以添加此代码以运行您的 customcell 我希望这对您有用

 - (UITableViewCell *)tableView:(UITableView *)tableView
            cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        CustomCell *cell =
            [tableView dequeueReusableCellWithIdentifier:@"Cell"
                                            forIndexPath:indexPath];
        if (cell == nil) 
    {
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    UITableViewCell *cell = [nib objectAtIndex:0];

    }
cell.textLabel.text = @"Hi";

return cell;
    }
于 2013-08-26T09:29:27.683 回答
0

对于 iOS 6+,您应该使用以下方法:

- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier

在加载单元格之前调用它。

还有其他类似的方法,您还可以在其中注册页眉和页脚,甚至以编程方式生成的单元格将类注册到 tableview。

    - (void) viewDidLoad {

        ...
        [self.tableView registerNib:[UINib nibWithNibName:@"CellId" bundle:nil] forCellReuseIdentifier:cellIdentifier];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView
                cellForRowAtIndexPath:(NSIndexPath *)indexPath 
        {
            CustomCell *cell =
                [tableView dequeueReusableCellWithIdentifier:@"CellId"
                                                forIndexPath:indexPath];
      }

dequeueReusableCellWithIdentifier将始终返回一个单元格,因此无需检查cell == nil

于 2014-09-30T12:10:34.613 回答
0

您必须创建 .xib 文件,然后创建一个继承自UITableViewCell与 .xib 同名的类。

在 .xib 中,您将根据需要设计您的单元格。没有 ViewController,只有一个 UIViewCell 及其插座。

选择您的单元格,然后在 Utilities / Inspector 中,将单元格的类别设置为您自定义单元格的名称。

在此处输入图像描述

现在,如果您使用“助手编辑器”,您将能够将插座拖放到 .h 文件中,以将属性添加到您的自定义单元格。

在您项目的任何类中,如果您导入全新单元格的标题,您将能够通过调用创建自定义单元格:

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
UITableViewCell *cell = [nib objectAtIndex:0];

(在这种情况下,我的文件名为:CustomCell.h / CustomCell.m / CustomCell.xib)

为这个自定义单元创建的属性可以像任何类的任何属性一样访问。

于 2013-08-26T08:11:51.993 回答