我有自定义UITableViewCell
:
@interface PostCell ()
@property (weak, nonatomic) IBOutlet PostView *postView;
@end
@implementation PostCell
- (void)setPost:(Post *)newPost
{
self.postView.post = newPost;
}
@end
包含自定义PostView
(UIView
子类)。
这是我将Post
model
发送给PostCell
的方式,然后将model
转发给PostView
subview
和PostView
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
model
有title
和image
属性。由于每个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];
让我异常。
首先,我想知道它的好方法,如果是,那么我可以继续删除异常中断。
答案 0 :(得分:2)
调用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
时,您的单元格尚未创建(这就是您获得异常的原因)。最好的方法是将新属性添加到Post
对象中,将其称为cellHeight
,并将单元格的高度保存在此对象中。然后返回post.cellHeight