2014-02-20 92 views
0

我有這個在我的控制器:的UITableViewCell子視圖定製

- (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我在哪裏設置子視圖值(imageviews圖像,文本labels等)?

或者如果更容易點我如何將buttons添加到我的細胞與drawRect和如何檢測touchdrawRect裏面的圖像和按鈕?這樣我就不需要改變當前版本。

+0

在你的'setPost'函數中,你需要創建一個視圖(無論你需要什麼),然後將該視圖添加爲你的單元格的子視圖:'[self.contentView addSubview:newView]'。然後再次爲您想要您的單元格包含的任何其他視圖重新執行此操作。 – Putz1103

回答

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滯後的偉大工程。

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]; 
}