按下导航控制器后退按钮时如何导航到其他视图控制器?

时间:2014-11-18 10:02:51

标签: ios objective-c uinavigationcontroller

我有viewController,其中点击后退按钮,我需要转到特定的viewController并调用其方法。所以我创建了一个barButton并添加为导航栏中的BACK按钮。当调用selector时,我只能看到黑屏,没有别的。

我在这里是怎么做的。

viewDidLoad

  //Back Button in navigation Bar.
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(navigationBackButtonClicked:)];
self.navigationItem.leftBarButtonItem=newBackButton;

下面的selector执行并显示黑屏。

  -(void)navigationBackButtonClicked:(UIBarButtonItem *)sender {
   SharedManager *sharedManagerObject = [SharedManager sharedInstance];

   NSString *source = sharedManagerObject.toCityString;
   NSString *destination =  sharedManagerObject.fromCityString;
   NSString *dateStr = sharedManagerObject.dateSelected_String;

   BusListViewController *buslist_VC = [self.storyboard instantiateViewControllerWithIdentifier:@"BusListViewController"];


   [buslist_VC getBusListForSource:source destination:destination date:dateStr];

   [self.navigationController popToViewController:buslist_VC animated:YES];

 }

3 个答案:

答案 0 :(得分:1)

在使用[popToViewController:animated:]之前,您需要将buslist_VC添加到导航控制器的视图层次结构中。这用于显示导航控制器堆栈中已有的一些视图控制器。

无论哪种方式,您所询问的对您的用户来说可能是一种奇怪的行为,但您可以使用:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 1] animated:NO];
[self.navigationController pushViewController:buslist_VC animated:NO];

答案 1 :(得分:0)

你无法回到新的ViewController,你可以在你的代码中推送一个新的ViewController来改变它:

[self.navigationController pushViewController:buslist_VC animated:YES];

但请记住,你将这个新的viewController放在另一个(你创建了一个newBackButton)中,默认的后退按钮会回到这个位置。如果你想回到root用户:

   [self.navigationController popToRootViewControllerAnimated:YES];

或者,现在你可以回到导航堆栈上的任何viewController,这个数组:

   NSArray *navStacks = self.navigationController.viewControllers;

使用popToViewController:确保在堆栈中。

答案 2 :(得分:0)

你应该使用

NSArray *navStacks = self.navigationController.viewControllers;

选择所需的视图控制器并执行

[self.navigationController popToViewController:selectedVC animated:YES];