编辑:看起来您想在第一个视图中显示食品列表。点击一个项目会打开一个详细视图。从该详细视图中,用户可以按下按钮将其添加到餐点中。最后,他们可以点击第一个视图上的按钮来打开餐点视图,其中应该包含他们选择的所有项目。
如果是这种情况,请在第一个视图控制器上保留一个数组,并确保细节(第二个)视图控制器在呈现时具有对第一个视图控制器的引用。这将让我们使用该数组。请注意,有更好的方法来构建它,但现在可以使用:
@interface FoodListViewController : UIViewController
@property (strong, nonatomic) NSMutableArray *foodItems
@end
@implementation FoodListViewController
- (void)showFoodItem
{
FoodItemDetailViewController *detailViewController = [[FoodItemDetailViewController alloc] initWithNibName:nil bundle:nil];
detailViewController.foodListController = self;
[self presentModalViewController:detailViewController animated:YES];
}
@end
显示详细视图后,点击“添加到餐点”按钮应将当前的“餐点项目”添加到数组中。在您的示例中,您使用的是字符串 - 如果您出于某种原因希望保留一个字符串数组,我将把它留给您。
@interface FoodItemDetailViewController : UIViewController
@property (nonatomic, weak) FoodItemsViewController *foodListController;
@end
@implementation FoodItemDetailViewController
- (IBAction)buttonTapped:(id)sender
{
[self.foodListController.foodItems addObject:self.mealItem];
// Update the UI to let the user know that the item was added to the meal
}
@end
最后,当需要展示 MealDetailsViewController 时,只需将您正在构建的数组传递给它:
@interface MealDetailsViewController : UIViewController
@property (nonatomic, strong) NSArray *foodItems;
@end
@implementation MealDetailsViewController
// Set foodItems before this view controller is presented, then use it to drive the
// UITableView data source, or find some other way of displaying it.
@end
如您所见,第二个和第三个视图控制器都由第一个呈现。视图控制器(几乎)总是形成一个层次结构——因此将数据保持在该层次结构的顶部(通过将其存储在 FoodListViewController 中)可以让您在呈现其他视图控制器时巧妙地将其传递到层次结构中。