动态添加对象到UITableView单元格

时间:2014-03-12 08:41:04

标签: ios uitableview

enter image description here![在此处输入图片说明] [2]我有一个表格视图,其中我使用的是我的自定义单元格,其中包含用户的个人资料图片,状态标签,时间戳标签,用户名标签,no评论标签和评论按钮。 当没有评论,即“4评论”被点击时,我必须在相应的单元格中显示评论以及原始帖子下面的用户名,用户个人资料图片等。  如何在应用程序运行时将这些对象动态添加到单元格中?还是有其他解决方案请告诉。 2个帖子的表格显示在图像右侧。应显示没有图像左侧的评论。  这是表格单元格的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {



    static NSString *CellIdentifier = @"MyCell";
    TableCell *cell = (TableCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self   options:nil];
        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (TableCell *)currentObject;
                break;
            }
        }
    }

    // Configure the cell.
    User *user = [postTableData objectAtIndex:indexPath.row];
    NSLog(@"pic:%@",user.profilePictureURL);
    cell.profilePicture.image = [UIImage imageNamed:@"avatar.png"];
    cell.profilePicture.layer.cornerRadius = cell.profilePicture.frame.size.height /2;
    cell.profilePicture.layer.masksToBounds = YES;
    cell.profilePicture.layer.borderWidth = 0;

    cell.userName.text = user.name;
    cell.status.text = user.status;
    cell.dateForStatus.text = user.datePosted;
    [cell.countComments setTitle:user.countOfComments forState:UIControlStateNormal];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    [cell.contentView.layer setBorderWidth:6.0f];
    [cell.contentView.layer setBorderColor:[[UIColor alloc] initWithRed:233/255.0 green:236/255.0 blue:233/255.0 alpha:1.0].CGColor];
    cell.commentButton.tag=indexPath.row;
    [cell.commentButton addTarget:self action:@selector(commentButtonPressAction:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
    ![enter image description here][3]}

4 个答案:

答案 0 :(得分:1)

我不确定它是否有效,但你可以尝试一下。覆盖您单元格上的touchesBegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     UITouch *touch = [touches anyObject];
     CGPoint point = [touch locationInView:self];    
     CGRect rect = [noComments frame];

     if (CGRectContainsPoint(rect, point))
     {
        UILabel *label = ... // the label you need to add.
       [self addSubview:label];
     }
}

答案 1 :(得分:1)

更改按钮操作方法:

- (void)onButtonTaped:(id)sender
{
    UIButton *button = sender;
    UILabel *newLabel = [ [ UILabel alloc] initWithFrame:CGRectMake (0, 100, 200, 50)];
    newLabel.text = @"Your new text here";
    [button.superview addSubview:newLabel];
}

但只有在屏幕上显示单元格之后,标签才会可见。当重建单元格时,标签将被删除。要保留标签,您仍需要更改

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

答案 2 :(得分:1)

我猜你是想扩大细胞。

您可以调用这几行来更新单元格,包括高度。

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];

所以只需设置一个标志以在cellForRowAtIndexPath中显示注释。

//AFTER_YOUR_SETTING
if(showComment){
    [cell loadCommentMethod];
}

而且,在heightForRowAtIndexPath

if(showComment){
    return [CellClass publicMethodForCalHeight:dataAtIndexPath];
} else {
    return kDefaultCellHeight;
}

答案 3 :(得分:0)

您可以使用insertRowsAtIndexPaths:withRowAnimation:的方法UITableView。您可以参考this link获取教程。另请参阅Apple docs