我的单元格略有不同,为此我需要将参数从我的UIViewController传递到我的UITableViewCell的子类。但它不起作用。场景如下:
MessagesViewController.m:
#import "MessagesViewController.h"
#import "MessageTableViewCell.h"
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[MessageTableViewCell class] forCellReuseIdentifier:MessengerCellIdentifier];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MessageTableViewCell *cell = (MessageTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:MessengerCellIdentifier];
if (cell == nil) {
cell = [[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MessengerCellIdentifier customParam:YES];
}
return cell;
}
MessageTableViewCell.m:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier customParam:(BOOL)customParam
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// **** GET Custom Parameter (customParam) HERE ??? ****/
}
return self;
}
在这种情况下,customParam是我的参数。一切似乎都没问题,但是细胞不是零,所以程序失败了。
答案 0 :(得分:5)
选项1:删除dequeueReusableCellWithIdentifier
行,以便每次都创建一个新的自定义单元格。否则,您使用的是预先存在的单元格,该单元格已将前一个customParameter
设置为显示的最后一个单元格所设置的内容。
- 注意选项1(添加为解释为什么它非常非常非常非常错误的想法(@Duncan C)。由于您使用{{1}设置单元格在创建你的单元格时,一旦它们滚动到屏幕外,iOS就会为你保留它们,以便你可以在你的代码要求时重复使用它们。但是你的代码永远不会要求可重复使用的单元格,因为它每次都会创建一个全新的单元格请求下一个单元格。这会导致高加载时间(每次创建一个新单元格)和高内存使用(因为操作系统正在保存单元格供您以后使用而不是立即解除分配)。可重用性是为原因,所以不要使用选项1,除非你有非常具体的需要(即便如此,你可能错了,不要这样做)。
选项2:将自定义参数更改为单独的方法调用。而不是在初始化程序中创建一个新方法,清除单元格并按照新自定义参数的方式重建它。然后,您可以使用新的ReuseIdentifier
方法重新使用单元格并修改其外观。
编辑:选项2的代码示例,尽可能简单:
在表格控制器中
setCustomParameter:
在你的手机单元.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MessageTableViewCell *cell = (MessageTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:MessengerCellIdentifier];
if (cell == nil) {
cell = [[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MessengerCellIdentifier];
}
[cell setCustomParam:customParam];
return cell;
}
答案 1 :(得分:0)
然后你必须尝试另一种方法在MessageTableViewCell中添加参数。该参数为nil,因为每次重用行中的表格视图单元格时单元格都不是
MessageTableViewCell * cell =(MessageTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:MessengerCellIdentifier];
你必须调用另一种方法,比如
MessageTableViewCell *cell = (MessageTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:MessengerCellIdentifier];
if (customParam)
{
// IF custom parameter is your labal
cell.yourCustomParameter.text = @"Add your content here"
}