如何处理iOS中UITableViewCell中不确定数量的图像数据?

时间:2014-04-23 10:08:16

标签: ios objective-c uitableview

我正在尝试使用从Web服务器返回的动态内容构建tableView。 Web服务器发送的数据可以视为数组。它的每个成员都包含一些文本,可能包含或不包含一些图像。我想使用UITableViewCell来表示数组中的一个成员,但无法弄清楚如何处理不确定数量的图像。我该如何处理这类问题?或者还有其他一些解决方案吗?

非常感谢。

编辑1

似乎问题只包含文本很难得到正确答案。因此,Web服务器发送的数据如下所示:

{
"data": [
    { 
        "author":"Bill" , 
        "content":"apple is great" , 
        "replyTime":"2014-04-23 22:22:00" 
    },
    { 
        "author":"George" , 
        "content":"banana is great too, have a look at the picture[imgstart]http://img.example.net/banana.jpg[imgend]",
        "replyTime":"2014-04-23 22:25:00" 
    },
    { 
        "author":"Thomas" , 
        "content":"peach is better, see[imgstart]http://img.example.net/peach1.jpg;http://img.example.net/peach2.jpg[imgend]",
        "replyTime":"2014-04-23 22:25:30"
    }
]

}

注意第三个JSON数组成员,[imgstart]和[imgend]之间有两个以分号分隔的图像链接,这意味着一个回复中有两个图像。

我的问题是在设计UITableViewCell的子类视图时,我该如何安排imageView

抱歉造成混淆

编辑2

我朋友的建议是我应该使用webView在网页中显示数据。

5 个答案:

答案 0 :(得分:1)

使用数组中的项目数来确定numberOfRowsInSection - 它将使用正确的单元格数填充UITableView。

答案 1 :(得分:0)

如果要显示的图片太多,宽度大于单元格的宽度,也许您可​​以UIScrollViewUITableViewCell {{1}}。然后图像可以从左向右滚动。

答案 2 :(得分:0)

配置单元格时,可以检查某个indexPath是否有图像,如果是,则分配新的UIImageView,设置图像属性并添加到单元格的内容视图中。否则只显示文字。

-(UITableViewCell)tableviewForIndexPath:(NSIndexPath)index
{
   ...
   if([data[index.row] hasImage])
   {
      UIImageView *imageView = [UIImageView alloc] initWithFrame:CGRectMake(...)];
      imageView.image = data[index.row].image;
      [cell.contentView addSubview:imageView];
   }
   ...
}

答案 3 :(得分:0)

首先,您需要在其中一个对象中实施UITableViewDataSource协议(documentation)(例如,可以是托管UITableView的View Controller);

其次,通过将UITableView设置为实现dataSource协议的对象来配置UITableViewDataSource;

最后,每当您收到新数据时,都会在reloadData上致电UITableView。这会导致重新加载数据,并再次调用UITableViewDataSource的方法。

答案 4 :(得分:0)

首先解析JSON并在模型类中轻松提供链接和内容。

对UITableViewCell进行子类化并使用例如

- (void) populateCellWithData: (YourModelClass *)data;

填充内容时,您可以添加图像。如果您需要针对不同情况使用不同的布局,则可以在

中进行布局
- (void) layoutSubviews;

在显示单元格之前将调用它,您可以在那里设置各个子视图的大小和位置。

希望这有帮助。