Objective C - 在两个UITableViewControllers之间传递数据

时间:2015-03-28 21:18:26

标签: ios objective-c uitableview nsarray

在第二个UITableViewController

中显示详细信息

我的应用程序是一个简单的Recipebook来理解UITableViewControllers。该应用程序包含两个UITableViewControllers。第一个UITableViewController包含一个UITableView,其中包含配方名称列表。如果选择一个单元格,您将转到第二个UITableViewController。第二个UITableViewController包含一个UITableView,其中包含一些成分列表。

该应用程序包含以下类:

  • RecipeTableViewController(第一个)
  • IngredientTableViewController(第二个)
  • RecipeObject
  • RecipeData

RecipeObject类包含两个属性。 NSString类型的一个属性,带有配方名称。另一种属性是NSArray类型的成分。 RecipeObject对象位于RecipeData类中。

RecipeObject *recipe1 = [[RecipeObject alloc]init];
recipe1.name = @"Fresh Coconut Cake";
recipe1.ingredients = [NSArray arrayWithObjects:@"Coconut cups", @"Milk", @"Baking powder", @"Butter", @"Sugar", @"Eggs", nil];

在RecipeTableViewController中调用RecipeData以在tableView中显示配方名称。

从RecipeData类到RecipeTableViewController的消息:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.recipes = [RecipeData allRecipes];}

在tableView中显示名称:

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

    static NSString *cellIdentifier = @"recipeCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    RecipeObject *recipes = [self.recipes objectAtIndex:indexPath.row];
    cell.textLabel.text = recipes.name;

    return cell;
}

如何将recipe1.ingredients数组添加到IngredientsTableViewController?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

选择配方时执行segue。在准备segue方法时,选择所选配方并将成分传递给ingredientsTableViewController。 与此非常相似:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self performSegueWithIdentifier:@"to_Ingredients" sender:self];
}

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"to_Ingredients"]) {
        IngredientTableViewController *ingredientsTableViewController = (IngredientTableViewController *)[segue destinationController];

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row];
    ingredientsTableViewController.ingredients = recipe.ingredients;

    }

}

如果您不使用设置此segue的故事板,您只需要第一个应该如下所示的方法:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

IngredientTableViewController *ingredientsTableViewController = [[IngredientTableViewController alloc]init];
RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row];
ingredientsTableViewController.ingredients = recipe.ingredients;
[self showDetailViewController:ingredientsTableViewController sender:self]
}