我真的不确定如何用最少和最清晰的词语来表达这个问题。但我会尽我所能。
我有一个ShoppingCartVC类,我想向它添加产品。所以我模态地呈现了一个CategoriesVC。当我在tableView行中选择一个类别时,它会转到包含该类别中所有产品的ProductsVC。所以现在我可以选择一个产品。但是如何将所选对象发送回ShoppingCartVC?在使用委托之前我能够成功实现这一点,但那时我没有使用CategoriesVC。我只是直接转到ProductsVC,所以在我发布之前,我可以将ShoppingCartVC(呈现VC)设置为ProductsVC的代表,并在选择产品时将其解除。
但是现在,由于ProductsVC在我的navigationController的VC层次结构中是1VC,我不能这样做。
我尝试过搜索NSNotification,但这似乎不是正确的解决方案。
我该如何解决这个问题?希望你能给我一些示例代码。
答案 0 :(得分:1)
也许我错过了一些东西,但是从CategoriesVC到ProductsVC传递对ShoppingCartVC的引用有什么问题?您应该能够使用委托模式或发布ShoppingCartVC正在侦听的NSNotification来完成您要查找的内容。
另一种方法是创建一个购物车单件(具有购物车阵列属性的NSObject,用于存放每个产品),您可以从任何地方添加项目,然后当您的ShoppingCartVC出现时,更新内容您正在使用单例对象的当前内容显示的购物车。
答案 1 :(得分:1)
我认为委托模式是解决问题的最佳方案。
在这种情况下有3个ViewControllers:
ShoppingCartViewController从CategoryViewController获取类别。
ShoppingCartViewController从ProductViewController获取产品。
解决方案:
CategoryViewControllerDelegate
和ProductViewControllerDelegate
。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中实现协议,并使用CategoryViewController将UINavigationController显示为模态rootViewController
。
从categoryViewController:didSelectCategoryAtIndex:
获取所选类别,并将productViewController推送到navigationController。
将productViewController推送到navigationController
ProductViewController *productViewController = [ProductViewController new];
productViewController.delegate = self;
[categoryViewController.navigationViewController pushViewController:productViewController animated:YES];
您可以在ShoppingCartViewController中获得类别和产品。