我查看了 Apple 的 WWDC 2010 代码中的 TableViewUpdates/TVAnimationGestures 并且在复制 UITableViewCell 子类时遇到了麻烦。这就是我所做的:
我用一些简单的属性创建了一个新的 UITableViewCell 子类:
@interface TargetDetailTableViewCell : UITableViewCell
@property (nonatomic, retain) IBOutlet UILabel *DescriptionLabel;
@property (nonatomic, retain) IBOutlet UILabel *ValueLabel;
@property (nonatomic, retain) IBOutlet UIImageView *DotImageView;
在.m中,我只是释放内存。在 IB 中,我将我刚刚拖入 IB 的 UITableViewCell 的类更改为 TargetDetailTableViewCell。我将 TargetDetailTableViewCell 的出口连接到适当的标签和图像视图。
在课堂上我想使用这个:
@class TargetDetailTableViewCell;
//some properties
@property (nonatomic, assign) IBOutlet TargetDetailTableViewCell *TargetCell;
在他们中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *TargetCellIdentifier = @"TargetDetailTableViewCellIdentifier";
TargetDetailTableViewCell *cell = (TargetDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:TargetCellIdentifier];
if (cell == nil) {
UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
[nib instantiateWithOwner:self options:nil];
cell = self.TargetCell;
self.TargetCell = nil;
}
// set some labels
return cell;
}
当我运行它时,我收到错误:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
我唯一能看到苹果的例子和我的例子不同的是,当我在他们的 IB 中点击 UITableViewCell 的子类时,他们有一个 File's Owner 属性集。我不知道他们是如何连接那个插座的,因为它在他们使用单元的类中被声明为一个属性,但是他们没有建立物理 IB 连接。有人可以向我解释一下或者我做错了什么吗?
另外,如果有人可以解释这一点,那就太好了:
UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
[nib instantiateWithOwner:self options:nil];
cell = self.TargetCell;
self.TargetCell = nil;
似乎您创建了笔尖,而从内存中实例化的笔尖的所有者是您所在的类或自己(我的视图控制器)。然后最后两行让我感到困惑。这就像你告诉你的单元格指向新创建的对象,然后你将新创建的对象设置为 nil。我认为在我的脑海中,单元格现在也指向零。谢谢。