直到现在,我正在做这样的事情:
- (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中寻找出口。
我已经在很多ViewControllers中重用了这个单元格。
我想避免这种泄漏,但我不希望所有这些VC成为xib的个人所有者并在那里实现IBActions并在其中拥有Outlets的属性。
我应该创建一个静态方法,只是从xib加载单元并将它返回给我吗? 但是,我将如何将对象作为xib的所有者?
答案 0 :(得分:0)
您必须创建.xib文件,然后创建一个继承自{。{1}}且与.xib同名的类。
在.xib中,您可以根据需要设计单元格。没有ViewController,只是一个UIViewCell及其出口。
选择您的单元格,在“工具”/“检查器”中,将单元格的类别设置为自定义单元格的名称。
现在,如果您使用“助理编辑器”,则可以将插座拖放到.h文件中,以便为自定义单元格添加属性。
在项目的任何类别中,如果您导入全新单元格的标题,您将能够通过调用来创建自定义单元格:
UITableViewCell
(在这种情况下,我的文件命名为:CustomCell.h / CustomCell.m / CustomCell.xib)
为此自定义单元格创建的属性可以像任何类的任何属性一样访问。
答案 1 :(得分: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;
}
答案 2 :(得分: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