委托给NavigationController内的SecondViewController以Modally方式呈现

时间:2012-05-15 03:25:13

标签: iphone objective-c delegation

我真的不确定如何用最少和最清晰的词语来表达这个问题。但我会尽我所能。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

也许我错过了一些东西,但是从CategoriesVC到ProductsVC传递对ShoppingCartVC的引用有什么问题?您应该能够使用委托模式或发布ShoppingCartVC正在侦听的NSNotification来完成您要查找的内容。

另一种方法是创建一个购物车单件(具有购物车阵列属性的NSObject,用于存放每个产品),您可以从任何地方添加项目,然后当您的ShoppingCartVC出现时,更新内容您正在使用单例对象的当前内容显示的购物车。

答案 1 :(得分:1)

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

在这种情况下有3个ViewControllers:

  1. ShoppingCartViewController
  2. CategoryViewController
  3. ProductViewController
  4. 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中实现协议,并使用CategoryViewController将UINavigationController显示为模态rootViewController

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

    将productViewController推送到navigationController

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

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