首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UINib为UITableViewCell分配插座

使用UINib为UITableViewCell分配插座
EN

Stack Overflow用户
提问于 2012-02-02 08:54:24
回答 1查看 2.3K关注 0票数 0

我查看了Apple的WWDC2010代码中的TableViewUpdates/TVAnimationGestures,在复制UITableViewCell子类时遇到了问题。这就是我所做的:

我用一些简单的属性创建了一个新的UITableViewCell子类:

代码语言:javascript
复制
@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连接到适当的标签和图像视图。

在这个类中,我想使用以下代码:

代码语言:javascript
复制
@class TargetDetailTableViewCell;

//some properties
@property (nonatomic, assign) IBOutlet TargetDetailTableViewCell *TargetCell;

在.m中:

代码语言:javascript
复制
- (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的子类时,他们有一个文件的Owner属性集。我不知道他们是如何连接这个插座的,因为它被声明为他们使用该单元的类中的一个属性,但他们没有建立物理IB连接。有没有人能给我解释一下,或者我做错了什么?

另外,如果有人能解释这一点,那就太好了:

代码语言:javascript
复制
        UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
        [nib instantiateWithOwner:self options:nil];
        cell = self.TargetCell;
        self.TargetCell = nil;

似乎您创建了nib,从内存实例化的nib的所有者是您所在的类或self (我的视图控制器)。然后最后两行把我搞糊涂了。这就像您告诉您的单元格指向新创建的对象,然后将新创建的对象设置为nil。在我的脑海中,我想,细胞现在也指向零。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 10:08:16

您需要在您的自定义表格视图单元格nib中拥有一个所有者,并且该所有者需要是您的TableViewDataSource类(即实现cellForRowAtIndexPath方法并具有到表格单元格的TargetCell插座的表格视图控制器)。

您还需要将此TargetCell插座从文件所有者( TableViewController)连接到您的自定义表视图。

这样做的原因是,当您使用表格视图控制器作为所有者加载笔尖时,它会将您拥有的插座( TargetCell属性)设置为指向在笔尖中定义的表格视图单元格。

然后将此引用复制到cell方法变量,对其进行配置并返回。在复制该属性后将其赋值为nil,因为您只需要将其作为引导程序来获取对半边对象的引用,以便在cellForRowAtIndexPath方法中使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9105674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档