如何将不同的数据发送到同一个 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 吗?如果是这样,我们如何保护它?