在ViewController中将JSON显示为List(不在TableView中)

时间:2012-12-20 07:58:44

标签: iphone objective-c ios nsjsonserialization

我正在生成一个JSON字符串,我需要解析并显示在页面上。我的JSON字符串输出有关CD内容的信息,如下所示:

[{"song_name":"Song 1","artist":"John","price":"$1"}, 
{"song_name":"Song 2","artist":"Anna","price":"$2"}, 
{"song_name":"Song 3","artist":"Ryan","price":"$3"}]

我想以列表格式显示我的viewController中的内容,显示song_name,artist和price。我不想使用tableView来显示这些信息,而只想显示一个列表。我该怎么做呢?我假设我需要使用NSJSONSerialization,但过去只用过tableView。谢谢!

3 个答案:

答案 0 :(得分:1)

请按照以下步骤操作:

  1. 解析JSON并将键值对(CD的NSDictionary)存储在NSArray中(比如infoArray)
  2. 在viewController的视图中添加UIScrollview作为子视图。
  3. 动态分配UILabels,具体取决于infoArray计数。查看您的数据我相信您可以使用静态框架初始化标签,即您的y可以保持静态。
  4. 在此标签上添加infoArray中的文字。
  5. 不过,我建议只使用UITableView。它更简单,更好的方法

答案 1 :(得分:1)

除了其他答案之外,你只能使用一个标签,只需在曲目信息之间用@“\ n”创建NSMutableString(用于动态添加曲目信息),将其传递给label.text并将UILabel的属性numberOfLines设置为0 < / p>

答案 2 :(得分:0)

您确实使用NSJSONSerialization创建了一个字典数组,然后逐个解析此数组并创建每个字典的视图。你可能最好使用一种方法:

-(UIView *) listView: (NSString *)songName andArtist:(NSString *)artist andPrice:(NSString *)price andIndex:(int)viewIndex {
    //create your view here and do anything you want

    UIView *subView = [[UIView alloc] init] autoRelease];
    subView.frame = CGRectMake(0, viewIndex * 70, self.view.frame.width, 70);

    //add labels and other stuff


   // return the view
   return subView;
}

您可以通过设置不同的Y值将它添加到当前视图中,以便它们通过使用前一个方法的viewIndex显示在彼此之下...所以如果您有一个数组,它会是这样的:

for (int i = 0; i < [array count]; i++) {

    NSDictionary *dict = [array objectAtIndex:i];
    NSString *songName = [dict valueForKey:@"song_name"];
    NSString *artist = [dict valueForKey:@"artist"];
    NSString *price = [dict valueForKey:@"price"];

    UIView *tempView = [self listView:songName andArtist:artist andPrice:price andIndex:i];

    [self.view addSubView:tempView];

}

您必须将它全部添加到滚动视图中,否则您将遇到页面上许多行的问题。如果您不知道如何,请使用Google for UIScrollView。

但我建议不要采用这种方法。表格视图是有原因的。它们是为这些东西而制造的。因为它还提供滚动,绘图和刷新。如果可以,请使用它们!