好的,我试图通过AppDelegate将字符串从一个视图控制器传递到另一个视图控制器。我希望在发生这种情况时保持当前视图。
这是我目前用来执行此操作的代码的主体:
AppDelegate *dataCenter = (AppDelegate *)[[UIApplication sharedApplication] delegate];
MyMealViewController *vc = [[MyMealViewController alloc] initWithNibName:nil bundle:nil];
dataCenter.selectedMenuItem = recipeLabel.text;
[self presentViewController:vc animated:YES completion:NULL];
当我运行程序时,我能够确认字符串是否正确传递。但是,然后模拟器上的视图才变黑。我假设这是因为initWithNibName设置为nil。
所以我的问题是:如何更改我的代码以便仍然传递字符串,但当前视图将继续显示在iphone上。是否有一行代码可以重新加载当前视图?
感谢您对此问题的帮助。我是xcode的新手,所以我可能会犯一个非常基本的错误。如果有任何其他信息有助于回答此问题,请与我们联系。
答案 0 :(得分:1)
编辑:您希望在第一个视图中显示食物列表。点击项目可打开详细视图。从该详细视图,用户可以按下按钮将其添加到用餐中。最后,他们可以点击第一个视图上的按钮来打开膳食视图,该视图应该包含他们选择的所有项目。
如果是这种情况,请在第一个视图控制器上保留一个数组,并确保详细信息(第二个)视图控制器在显示时引用第一个视图控制器。这将让我们使用该数组。请注意,有更好的方法来构建它,但这现在可以使用:
@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
显示详细视图后,点击“添加到用餐”按钮应将当前的“mealItem”添加到数组中。在你的例子中,你使用的是字符串 - 如果你想出于某种原因保留一串字符串,我会把它留给你。
@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中)可以让您在呈现其他视图控制器时将其整齐地传递到层次结构中。