我有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];
}
答案 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];