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。