0

我真的不知道如何用最少和最清楚的词来表达这个问题。但我会尽力而为。

我有一个类 ShoppingCartVC,我想向其中添加产品。因此,我以模态方式呈现 CategoriesVC。当我在 tableView 行中选择一个类别时,它会转到包含该类别中所有产品的 ProductsVC。所以现在我可以选择一个产品。但是如何将选定的对象发送回 ShoppingCartVC?在使用委托之前,我能够成功地实现这一点,但那是我没有 CategoriesVC 的时候。我只是直接转至 ProductsVC,因此在转场之前,我可以将 ShoppingCartVC(呈现 VC)设置为 ProductsVC 的代表,并在选择产品时将其关闭。

但是现在由于 ProductsVC 在我的 navigationController 中是 VC 层次结构的 1VC,所以我不能这样做。

我尝试搜索 NSNotification 但这似乎不是正确的解决方案。

我该如何解决这个问题?希望你能给我一些示例代码。

4

2 回答 2

1

也许我遗漏了一些东西,但是将 ShoppingCartVC 的引用从 CategoriesVC 传递到 ProductsVC 有什么问题?您应该能够使用委托模式或发布 ShoppingCartVC 正在侦听的 NSNotification 来完成您正在寻找的事情。

另一种方法是创建一个购物车单例(具有包含每个产品的购物车数组属性的 NSObject),您可以从任何地方添加项目,然后当您的 ShoppingCartVC 出现时,更新您所在的购物车的内容显示单例对象的当前内容。

于 2012-05-15T03:49:18.493 回答
1

我认为委托模式是解决您问题的最佳方法。

在这种情况下有 3 个 ViewController:

  1. ShoppingCartViewController
  2. 类别视图控制器
  3. 产品视图控制器

ShoppingCartViewController 从 CategoryViewController 获取类别。

ShoppingCartViewController 从 ProductViewController 获取产品。

解决方案:

  • 创建协议CategoryViewControllerDelegateProductViewControllerDelegate.

CategoryViewControllerDelegate

@protocol CategoryViewControllerDelegate <NSObject>
...
- (void)categoryViewController:(CategoryViewController *)categoryViewController didSelectCategoryAtIndex:(int)index;
...
@end

ProductViewControllerDelegate

@protocol ProductViewControllerDelegate <NSObject>
...
- (void)productViewController:(ProductViewController *)productViewController didSelectCategoryAtIndex:(int)index;
...
@end
  • 在 ShoppingCartViewController 中实现协议并将 UINavigationController 显示为模态, CategoryViewController 为rootViewController.

  • 从中获取所选类别categoryViewController:didSelectCategoryAtIndex:并将 productViewController 推送到 navigationController。

将 productViewController 推送到 navigationController

ProductViewController *productViewController = [ProductViewController new];
productViewController.delegate = self;
[categoryViewController.navigationViewController pushViewController:productViewController animated:YES];

您可以在 ShoppingCartViewController 中获得类别和产品。

于 2012-05-15T06:50:31.613 回答