我有一个UITableView
,它包含一个自定义UITableViewCell
. 为了测试,我有一个包含三个字符串的数组。UITableView
委托方法按预期调用,但是,tableView :cellForRowAtIndexPath委托始终传递一个NSIndexPath
其行属性始终为的实例== nil
:
tableView:cellForRowAtIndexPath
被调用 3 次(我的数组中的每个对象一次)。我tableView
在设计器(故事板)中添加了 from,并为它创建了一个出口。UITableViewCell 实例似乎已正确实例化,每次调用此委托。我只是无法理解为什么[indexPath row]
价值总是nil
.
接口:
在实现文件中:
@interface FirstViewController ()
@property(nonatomic, strong)AppDelegate *sharedDelegate;
@property(nonatomic, strong)NSArray *userList;
@end
在标题中:
@interface FirstViewController : UITableViewController <FacebookDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end
初始化自定义单元格:
-(void)viewDidLoad
{
[self.tableView registerClass: [ListCategoryCell class]forCellReuseIdentifier:@"ListCategoryCell"];
self.userList = @[@"d", @"g", @"f"]; // make some test data
}
这让我发疯的代表:
//NSIndexPath.row is nil ?!
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"ListCategoryCell";
ListCategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = (ListCategoryCell *)[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
}
cell.titleLabel.text = [self.userList objectAtIndex:[indexPath row]];
cell.detailLabel.text = @"Detail";
return cell;
}
我错过了什么吗?谢谢!
现在工作
我遗漏了一些我认为与我的问题非常相关的上下文(我不应该有)。我最初创建了一个 UIViewController,然后将一个 UITableView 添加到这个视图中。在 UITableView 我创建了一个自定义原型单元格。我做了所有的家务:
UIViewController
实施了UITableViewDelegate
& UITableViewDatasource
。为UITableView
. 连接所有网点
一切似乎都有效,除了indextPath.row
财产总是nil
. 我发现的一些资源表明,在调用 uitableview 代表之前,自定义单元格不可见。
最后,我使我的类成为UITableViewController
. 事情开始起作用了。我仍然很好奇为什么我最初的尝试失败了。
感谢大家的时间。一些很棒的评论帮助我调查了一些“值得了解”的主题。