我在控制器中有这个:
- (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;
}
使用[postCell setPost:post];
我发送我要使用的自定义单元格模型。
- (void)setPost:(Post *)newPost
{
if (_post != newPost) {
_post = newPost;
}
[self setNeedsDisplay];
}
现在这是我的版本,但我想改变它。现在我[self setNeedsDisplay]
调用了drawRect
- 我想使用subviews
并且不知道如何启动它。
我在哪里添加subviews
,如果使用IBOutlets
,我在哪里根据该_post设置子视图值(imageviews
图片,labels
文字等...)? ?
或者,如果更容易指出如何使用drawRect将buttons
添加到我的单元格以及如何检测touch
内的图像和按钮上的drawRect
?这样我就不需要改变当前的版本。
答案 0 :(得分:1)
- (void)setPost:(Post *)newPost
{
if (_post != newPost) {
_post = newPost;
}
[self layoutSubviews];
[self refreshContent];
}
- (void)layoutSubviews
{
[super layoutSubviews];
if (self.titleLabel == nil) {
self.titleLabel = [[UILabel alloc] init];
[self addSubview:self.titleLabel];
}
if (self.imageView == nil) {
self.imageView = [[UIImageView alloc] init];
[self addSubview:self.imageView];
}
// here I also set frames of label and imageview
}
- (void)refreshContent
{
[self.titleLabel setText:_post.title];
[self.imageView setImage:self.post.image];
}
这就是我完成它的方式,它在UITableView
没有任何滞后的情况下运行良好。
答案 1 :(得分:0)
- (void)setPost:(Post *)newPost
{
if (_post != newPost) {
_post = newPost;
}
//check subviews exist and set value by newPost, if need no view, add subview, if need value, set new value
//Following code is just sample.
if(!self.imageView){
self.imageView = [[UIImageView alloc] init];
[self.contentView addSubview:self.imageView];
}
if(newImage){
self.imageView = newImage;
}
[self setNeedsDisplay];
}