Edd*_*die 7 objective-c uitableview xib ios uicollectionview
长话短说,我想创建一个XIB文件,其中包含:
一个看法.在该视图中,它有很多东西和tableView.(连接数据源,委托给文件所有者).该视图是XIB文件的主视图.
自定义单元格,(用作tableView的原型单元格,因为XIB不支持原型tableView).
我怎么能实现这两个目标?另外,我想知道同样适用于UICollectionView.
我创建了这两个,将它加载到主视图(主视图在主故事板中).但是tableView没有按预期加载自定义单元格.单元格只是空白,看起来不像它在笔尖中设计的那样.
编辑1
这是我如何将nib注册到storyboard中的主视图:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
我有很多viewControllers,所以我发现这是添加VC的最佳方式.
关于上面描述中的nib,我只是使用常规初始化:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
如果在视图中执行了load方法,我将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.
}
Run Code Online (Sandbox Code Playgroud)
崩溃消息:
***由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥tableView的密钥值编码兼容.
我在这做错了什么?这是我如何设计笔尖的图片:

如您所见,文件的所有者的mainView连接到mainView包含tableView的地方.customCell只是一个自定义设计的单元格,在同一个文件(.m文件)中定义.
您应该按如下方式注册笔尖。
[self.tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellReuseIdentifier:@"MyCell"]
Run Code Online (Sandbox Code Playgroud)
我通常看到 registerClass 不加载视图,而只加载类。我不知道为什么。
另外,一个 .xib 应该只包含一个视图。所以你必须为UITableViewCell和做一个不同的UITableView。背后的原因很简单。每次加载 xib 时,都会创建 xib 内的所有视图。您不希望每次创建单元格时都需要一个新表。正确的?
至于你面临的崩溃。该错误看起来像是 name 存在插座问题tableView。尝试删除插座并重新初始化它们
补充内容
对于UICollectionView您可以注册的类,它会从 xib 加载您的视图。
[self.collectinView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier]
Run Code Online (Sandbox Code Playgroud)
更新
如果您使用的是故事板,则只需添加两个原型单元格,这将在表格视图中添加两个单元格。您可以在那里添加所有视图并为它们提供不同的类文件。会减少您需要维护的 xib 文件数量,而且您也不需要注册您的 nib。这可能是一个教程
| 归档时间: |
|
| 查看次数: |
13443 次 |
| 最近记录: |