如何将不同的数据发送到同一个 UITableView 中的自定义单元格?

Posted

技术标签:

【中文标题】如何将不同的数据发送到同一个 UITableView 中的自定义单元格?【英文标题】:How to send different data to custom cells in the same UITableView? 【发布时间】:2012-10-20 18:05:20 【问题描述】:

这是一个博客应用程序,我遇到的问题是帖子的布局及其 cmets。

理想的布局应该是这样的(版本 1):

父级是一个 UIScrollView,你看到的所有其他元素都在里面。底部的 UITabelView 接收评论线程。

这可行,但问题在于 cmets UITableView。我想我可以关闭它的滚动并让它根据 cmets 的数量垂直“增长”。但是在几行之后,内容被剪裁了。这是因为剩余的行没有在 UIScrollView 的垂直大小内呈现。

我已经阅读了 SO 以取消 UIScrollView - 而是在 UITableView 中构建整个东西。在顶部创建一个自定义单元格以容纳 UIImageView,在下方创建另一个自定义单元格用于发布文本等。

第 2 版

我的问题是:如何发送 JSON 提要的特定部分来填充自定义单元格,然后遍历填充下部单元格的 cmets?

例如,下面的代码将 cmets 发送/迭代到版本 1 中的 cmets UITableView。

但是我如何将帖子图像或帖子文本发送到版本 2 中的自定义单元格?

有没有更好的方法?非常感谢任何形式的建议。

DetailViewController.h

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

    static NSString *CellIdentifier = @"commentCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    NSDictionary *post           = self.detailItem;
    NSArray      *commentThread  = [post objectForKey:@"comment"];
    NSDictionary *comment        = [commentThread objectAtIndex:indexPath.row];

    NSString     *commentText       = [comment objectForKey:@"comment_text"];
    NSString     *commentAuthorName = [comment objectForKey:@"comment_author_name"];

    cell.textLabel.text       = commentText;
    cell.detailTextLabel.text = commentAuthorName;

    return cell;

JSON

...

    "post_id": "1463",
    "post_title": null,
    "post_text": "dffsdjdflkjklk dlfkjsdlfkj",
    "comment": [
        
            "comment_author_name": "2162",
            "comment_text": "yuiyuiiopiop",
        ,
        
            "comment_author_name": "2163",
            "comment_text": "tyutyutyutyuu",
        ,
        
            "comment_author_name": "2164",
            "comment_text": "sdfsertertr",
        ,
    ]
,
...

【问题讨论】:

【参考方案1】:

您可以将帖子文本和图像放入tableViewHeader。

或者把文章的文字和图片放到tableView section 0

将评论放在第 1 部分

编辑


    [super viewDidLoad];

    UIImageView *imageView = [[UIImageView alloc] init];
    //config the image view

    UILabel *postContentLabel = [[UILabel alloc] init];//or other UI component
    //Config the postContentLabel

    UIView *tableHeaderView = [[UIView alloc] init];
    [tableHeaderView addSubview:imageView];
    [tableHeaderView addSubview:postContentLabel];
    //set the tableHeaderView frame

    self.tableView.tableHeaderView = tableHeaderView;

【讨论】:

感谢@agassi_yzh - 代码会是什么样子?你知道的任何例子吗?【参考方案2】:

是的,您只需在表格视图中使用标题视图就可以了,我举个例子 取一个视图说 headerView 并在其中包含 imageView 响应后只需将图像放入 imageview 对象中 然后像这样加载表格视图

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

   return self.headerView;

 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

  return 210;


然后使用上面使用的 cellForRowAtIndexPath 。

【讨论】:

以上是关于如何将不同的数据发送到同一个 UITableView 中的自定义单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何将每个页面上的表单数据从数据库发送到不同的电子邮件地址

有人可以将来自不同主机的表单数据发送到我的 PHP 脚本,该脚本将获取的数据插入 MySQL 吗?如果是这样,我们如何保护它?

ASK PHP:如何将表单数据发送到不同的.php文件

如何在不同进程中从远程服务向 IPC 客户端发送数据

如何将两个不同的 ArrayList 从 Servlet 发送到 JSP

如何将两个不同 Spout 的输出发送到同一个 Bolt?