【发布时间】:2015-10-11 23:40:37
【问题描述】:
长话短说,我想创建一个 XIB 文件,其中包含:
一个视图。在那个视图中,它有很多东西和一个 tableView。 (连接的数据源,委托给文件的所有者)。该视图是 XIB 文件的主视图。
自定义单元格,(用作tableView的原型单元格,因为XIB不支持原型tableView)。
我怎样才能实现这两个目标? 另外,我想知道同样适用于 UICollectionView。
我已经创建了这两个,将其加载到主视图(主视图在主故事板中)。但是 tableView 没有按预期加载自定义单元格。单元格是空白的,看起来不像笔尖设计的那样。
编辑 1
以下是我将笔尖注册到故事板主视图的方法:
- (UIView *)buildViewFromViewControllerClass:(Class)viewControllerClass
{
id viewController = [[viewControllerClass alloc] initWithNibName:NSStringFromClass(viewControllerClass) bundle:nil];
[viewController view].frame = self.containerView.bounds;
[self addChildViewController:viewController];
return [viewController view];
}
我有很多viewController,所以我发现这是添加VC的最佳方式。
关于上面描述的笔尖,我只是使用常规初始化:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// init cell
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
if (!cell) {
cell = [[PaymentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"];
}
return cell;
}
如果在视图中确实加载方法,我将 nib 注册到 tableView,它会在[tableView dequeueResuableCell...] 中崩溃。注册码:
- (void)viewDidLoad
{
[super viewDidLoad];
// [self.tableView registerNib:[UINib nibWithNibName:self.nibName bundle:nil]
// forCellReuseIdentifier:@"CustomCell"];
// I'm commenting it, because it caused crash.
}
崩溃消息:
*** 由于未捕获的异常而终止应用程序 'NSUnknownKeyException',原因:'[ setValue:forUndefinedKey:]:这个类不是键值 键 tableView 的编码兼容。'
我在这里做错了什么? 这是我如何设计笔尖的图片:
如您所见,文件所有者的 mainView 连接到 mainView,其中包含 tableView。 customCell 只是一个自定义设计的单元格,在同一个文件(.m 文件)中定义。
【问题讨论】:
-
您能否添加代码以说明如何添加单元格和注册您的笔尖
-
这里是一个如何注册笔尖的例子
[self.tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellReuseIdentifier:@"MyCell"]; -
请看编辑1
-
@GaneshSomani 您应该将此作为答案发布(您将获得我的投票)。
-
@Eddie 根据苹果指南,您的 xib 中应该只有 1 个根视图
标签: ios objective-c uitableview uicollectionview xib