自定义UITableViewCell contentView高度

时间:2014-02-19 11:44:40

标签: objective-c uitableview

我有自定义UITableViewCell

@interface PostCell ()

@property (weak, nonatomic) IBOutlet PostView *postView;

@end

@implementation PostCell

- (void)setPost:(Post *)newPost
{
    self.postView.post = newPost;
}

@end

包含自定义PostViewUIView子类)。

这是我将Post model发送给PostCell的方式,然后将model转发给PostView subviewPostView subview取决于Post model的内容:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"PostCell";

    PostCell *postCell = (PostCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    Post *post = self.displayPosts[indexPath.row];
    [postCell setPost:post];

    return postCell;
}

我希望这是一个很好的方法,我在一些苹果定制的UITableView示例中引用了快速绘图。

让我们说Post modeltitleimage属性。由于每个PostView都不同height,我如何计算height并将其返回heightForRowAtIndexPath

在我的自定义UITableView单元格中添加此方法是否合适:

- (CGFloat)heightForCell
{
    return self.postView.frame.size.height;
}

然后

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // here we will need custom height based on image and text
    PostCell *postCell = (PostCell *)[tableView cellForRowAtIndexPath:indexPath];
    return [postCell heightForCell];
}

我试过了,但是

PostCell *postCell = (PostCell *)[tableView cellForRowAtIndexPath:indexPath];

让我异常。

首先,我想知道它的好方法,如果是,那么我可以继续删除异常中断。

1 个答案:

答案 0 :(得分:2)

调用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath时,您的单元格尚未创建(这就是您获得异常的原因)。最好的方法是将新属性添加到Post对象中,将其称为cellHeight,并将单元格的高度保存在此对象中。然后返回post.cellHeight

之类的内容