2

我有这个代码:

@interface MyBusinessesController : UIViewController
{
    NSDictionary *businesses;
    NSArray *items_array;
}
@property (weak, nonatomic) IBOutlet UILabel *messageLabel;
- (IBAction)plan:(id)sender;

@property (weak, nonatomic) IBOutlet UITableView *itemList;

@end

我在 .m 文件的标题区域中设置了 UITableView 和 NSArray。然后我有一个远程服务器调用并取回 JSON。我将 JSON 数据放入这样的数组中:

items_array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

然后我遍历这样的项目:

for (int i = 0; i<= items_array.count - 1; i++) 
{
  NSDictionary *dict = [items_array objectAtIndex:i];

  NSString *item_title = [dict objectForKey:@"item_title"];
  NSString *item_id = [dict objectForKey:@"item_id"];
  ...

然后我想将它作为一行添加到我的 UITableView 中,但我现在正在努力解决这个问题。

我想要的是向用户显示 item_title,当用户按下标题时,我将能够知道如何获取 item_title 的 item_id。

谢谢!

4

3 回答 3

2

您需要在UITableViewDataSource协议中实现所需的方法,并将dataSourcetableView 的属性设置为self.

因此,实现适当的UITableViewDelegate方法,并将delegatetableView 的属性设置为self.

有关需要哪些方法以及您可能想要实现哪些可选方法的详细信息,请参阅文档。

不要忘记在您的.h文件中宣传您的 Class 符合这两种协议:

@interface MyBusinessesController : UIViewController <UITableViewDataSource, UITableViewDelegate>

您可以通过调用使 tableView 刷新其内容[itemList reloadData]

于 2012-08-01T21:49:26.613 回答
2

表视图的工作方式与您使用的不同。您不会遍历数据并填写表格。相反,您将自己设置为表格的代表,然后表格会询问您:“您有多少数据,第 5 行需要什么数据”等等。

我真的建议你在这里阅读这个很棒的教程:http: //kurrytran.blogspot.com/2011/10/ios-5-storyboard-uitableview-tutorial.html

于 2012-08-01T21:53:21.427 回答
1

您可以让 UITableView 的数据源方法处理此问题,而不是遍历数组并提取字符串值。因此,在 cellForRowAtIndexPath 方法中,您将使用索引路径对 items_array 进行索引,如下所示:

NSDictionary *dict = [items_array objectAtIndex:[indexPath row]];

然后,您将像在循环中那样将字符串从字典中拉出,并将单元格的标题设置为字符串。要选择单元格,您可以在 didSelectRowAtIndexPath 方法中编写代码。

这是我正在从事的一个项目的示例:

    #pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [items_array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault)
                                                   reuseIdentifier:@"cell"];

    NSDictionary *dict = [items_array objectAtIndex:[indexPath row]];
    cell.textLabel.text = [dict objectForKey:@"item_name"];

    return cell;
}

第一种方法指定表中所需的部分数。如果你想要一个非常简单的表,这将是 1。第二种方法是行数。这将是 items_array 中的项目数,因此:[items_array count]。第三种方法基于索引创建单元格。它将从第 0 节到您指定的节数,从第 0 行到您指定的每个节的行数。所以现在你可以索引你的数组,而不是循环。[indexPath section]给出节号并[indexPath row]给出行号.

*我知道我可能应该在制作新的单元格之前出列单元格,但我的数组非常小。

于 2012-08-01T21:52:46.407 回答