0

アプリケーションの別のタブに移動するときに、彼にポップさせたいviewControllerがあります。私の問題は、このビュー内にいるときは、ABPeoplePickerNavigationControllerで人を追加するための「プラス」ボタンがあることです。人ピッカーがアクティブになるときよりも、ビューもポップするので、人を選択し終えると、アプリケーションがクラッシュします。戻るべき見方がないからです。

これはviewWillDisappearです:

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController popViewControllerAnimated:YES];
}

どうすれば解決できますか?

新しいコード:

- (void)viewWillDisappear:(BOOL)animated
{
    NSArray *controllers =  self.darioTabController.childViewControllers;
    UIView *v;

    for (UIViewController *vc in controllers)
    {
        if ([vc isKindOfClass:[@"ModalPresnterViewController" class]]) // or even [ABPeoplePickerNavigationController class]
        {
            v = vc.view;
        }
        else
            [self.navigationController popViewControllerAnimated:YES];
    }
}

ありがとう!

4

1 に答える 1

0

タブバーをタップしたときにのみアクションを実行する場合は、TabBarControllerデリゲートメソッドを使用できます。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
  //The user click on the item corresponding to ABPeoplePickerNavigationController
  if([viewController isKindOfClass:[ABPeoplePickerNavigationController class]])
  {
    //Do something if you cant
  }
  else // The user click on an other view controller (pop the ABPeoplePickerNavCtrl)
  {
    [yourController.navigationController popViewControllerAnimated:YES];
  }
}

または、どのTabBarItemが選択されているかを確認できます。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
  //Check if the selected view controller (ABPeopleNavCtrl)
  if(tabBarController.selectedIndex == indexOfTheABPeoplePickNavigationController)
  {

  }
  else // Else the user tap on an other item, so pop the controller you want
  {
    [theViewControllerToPop.navigationController popViewControllerAnimated:YES];
  }
}

注意:UITabBarControllerデリゲートを設定するためのRemeber;)

于 2012-10-22T10:05:23.083 に答える