0

好的,所以我试图通过 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 的新手,所以我可能会犯一个非常基本的错误。请让我知道是否有任何其他信息有助于回答这个问题。

4

1 回答 1

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

显示详细视图后,点击“添加到餐点”按钮应将当前的“餐点项目”添加到数组中。在您的示例中,您使用的是字符串 - 如果您出于某种原因希望保留一个字符串数组,我将把它留给您。

@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 中)可以让您在呈现其他视图控制器时巧妙地将其传递到层次结构中。

于 2012-12-06T21:33:45.823 回答