Tyl*_*itt 4 iphone cocoa-touch interface-builder uitableview ios
我试图在Interface Builder中创建一个自定义的UITableViewCell,并将实际UITableViewCell的File的Owner和Custom Class设置为我的新自定义UITableViewCell类.我会从文件所有者那里挂起IBOutlets并在遇到错误时得到错误:
TVCell *cell = (TVCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:nil options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[TVCell class]])
{
cell = (TVCell *)currentObject;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
最后我意识到你必须从UITableViewCell对象而不是文件所有者那里连接IBOutlets.为什么是这样?
谢谢
文件所有者是最终将加载NIB的对象的占位符对象.这是NIB之外的对象引用NIB内部对象的一种方式.在您的情况下,您正在尝试从NIB创建表视图单元格,因此您需要一些其他对象作为所有者.表视图单元不能同时位于NIB的外部和内部.
在这行代码中:
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TVCell"
owner:nil
options:nil];
Run Code Online (Sandbox Code Playgroud)
您可以在Interface Builder中为文件所有者占位符指定要解析的对象.我猜你的代码在像'MyTableViewController'这样的类中.如果是,您可以将owner参数的'self'传递给 - [NSBundle loadNibNamed:owner:].如果你这样做了,你可以在MyTableViewController类上安装有用于加载这个NIB的插座.具体来说,您可以使用它们来避免您拥有的for循环.你这样做是这样的:
然后将您的代码更改为类似于:
TVCell *cell = (TVCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];
cell = [self loadedTableViewCell];
[self setLoadedTableViewCell:nil];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1541 次 |
| 最近记录: |