Ios UITableView自定义单元格IBOutlets为零
我已经创建了一个类,它是Ios UITableView自定义单元格IBOutlets为零,ios,objective-c,uitableview,tableviewcell,Ios,Objective C,Uitableview,Tableviewcell,我已经创建了一个类,它是UITableViewCell的子类,我还为它创建了一个xib文件 在xib文件中,我添加了一个UITableViewCell,然后给它一个标识符“ChatCell”,然后在我的类中,我尝试像这样使用这个自定义单元格: static NSString *CellIdentifier = @"ChatCell"; ChatCustomCell *cell = (ChatCustomCell *)[tableView dequeueReusableCellWithIdent
UITableViewCell
的子类,我还为它创建了一个xib
文件
在xib
文件中,我添加了一个UITableViewCell
,然后给它一个标识符“ChatCell”,然后在我的类中,我尝试像这样使用这个自定义单元格:
static NSString *CellIdentifier = @"ChatCell";
ChatCustomCell *cell = (ChatCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
在类中,我提供了一个UIlabel
的IBOutlet
,并将其连接到我在xib
中创建的UIlabel
中的一个UIlabel
,但一旦创建了单元格,UIlabel
将保持nil
为什么会发生这种情况?您需要先在ViewController中注册自定义Xib文件 发件人: 调用此方法或registerClass:forCellReuseIdentifier:method 告诉表视图如何创建新单元格。如果 指定的类型当前不在重用队列中,表视图使用 提供了自动创建新单元对象的信息 例如,在设置tableView委托和数据源后,在您的
viewDidLoad
中写下这一行:
[yourTableView registerNib:[UINib nibWithNibName:@"ChatCustomCell" bundle:nil] forCellReuseIdentifier:@"ChatCell"];
否则,TableView将无法加载单元格Nib文件,这将导致单元格的IBOutlets为零 您需要首先在ViewController中注册自定义Xib文件 发件人: 调用此方法或registerClass:forCellReuseIdentifier:method 告诉表视图如何创建新单元格。如果 指定的类型当前不在重用队列中,表视图使用 提供了自动创建新单元对象的信息 例如,在设置tableView委托和数据源后,在您的
viewDidLoad
中写下这一行:
[yourTableView registerNib:[UINib nibWithNibName:@"ChatCustomCell" bundle:nil] forCellReuseIdentifier:@"ChatCell"];
否则,TableView将无法加载单元格Nib文件,这将导致单元格的IBOutlets为零 对于您的xib单元格,它可能返回nil,编写此代码可能会对您有所帮助
ChatCustomCell *cell = (ChatCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]
if (cell == nil)
{
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"nibName" owner:self options:nil];
cell = [nibArray objectAtIndex:0];
}
对于您的xib单元,它可能会为您的单元返回nil,编写此代码可能会对您有所帮助
ChatCustomCell *cell = (ChatCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]
if (cell == nil)
{
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"nibName" owner:self options:nil];
cell = [nibArray objectAtIndex:0];
}
您是否在ViewController中注册了nib文件?不,我没有,但我相信我不需要这样做。如果您使用故事板创建原型单元,您不需要注册nib,否则您应该使用xib文件。您可以在表视图中直接将多个单元设计为原型单元。不需要额外的nib。您是否在ViewController中注册了nib文件?不,我没有,但我相信我不需要。如果您使用故事板创建原型单元,则不需要注册nib,否则您应该使用xib文件。您可以在表视图中直接将多个单元设计为原型单元。不需要额外的nib。谢谢,这很有效。我以前也尝试过,但可能在某些地方出错。@Avinash:使用[tableView dequeueReusableCellWithIdentifier:forIndexPath:]进行单元格重用。这是一个用于非零返回单元格的新API。谢谢,这很有效。我以前也尝试过,但可能在某些地方出错。@Avinash:使用[tableView dequeueReusableCellWithIdentifier:forIndexPath:]进行单元格重用。这是一个用于单元格非零返回的新API。