我在浏览我的视图时遇到了一些问题。 这里是我的配置: 我有1个Tabbar控制器有2个关系segues嵌入到导航控制器内的2个简单视图。 现在我想从视图控制器1导航到视图控制器3,我也想显示在tabbar内选择正确的选项卡。如果我来自视图控制器1,我还希望后退按钮将我重定向到前一个选项卡。我尝试了在视图之间连接的segue,但如果我这样做,它只是将视图控制器推到导航堆栈上,但不会更改选项卡。所以,我现在的问题是,什么是管理这个问题如何从一个标签切换到另一个标签?
截图的最佳方式:
我在浏览我的视图时遇到了一些问题。 这里是我的配置: 我有1个Tabbar控制器有2个关系segues嵌入到导航控制器内的2个简单视图。 现在我想从视图控制器1导航到视图控制器3,我也想显示在tabbar内选择正确的选项卡。如果我来自视图控制器1,我还希望后退按钮将我重定向到前一个选项卡。我尝试了在视图之间连接的segue,但如果我这样做,它只是将视图控制器推到导航堆栈上,但不会更改选项卡。所以,我现在的问题是,什么是管理这个问题如何从一个标签切换到另一个标签?
截图的最佳方式:
这里有一个办法做到这一点。但我发布这真的说明你为什么不应该做到这一点。
无论如何,如果你仍然想做到这一点... 。
ViewController1
有着“跳转到VC3”按钮,线材达jumpToVC3:
//ViewController1.m
#import "ViewController1.h"
@implementation ViewController1
- (IBAction)jumpToVC3:(id)sender {
NSArray* viewArray = [[[self.tabBarController viewControllers] objectAtIndex:1] viewControllers];
[[[viewArray lastObject] view] setTag:1];
[self.tabBarController setSelectedIndex:1];
}
@end
“jumptToVC3”切换我们选项卡,并设置最前面的视图的视图标签属性设置为1 IF最前面的视图是VC2,这会立即触发VC3。如果最前面的视图是VC3,则会正确设置后退按钮。如果其他视图控制器被添加到此堆栈,则此导航将会中断。
ViewController2
有着 “移动到VC3” 按钮,有线到故事板顺着接下去VC3 “toVC3”
// ViewController2.m
#import "ViewController2.h"
#import "ViewController3.h"
@implementation ViewController2
//we use the view.tag property as a switch:
//0 = do nothing
//1 = segue to VC3
//2 = go to tab 0
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.view.tag ==1){
[self performSegueWithIdentifier:@"toVC3" sender:self];
} else if (self.view.tag == 2){
[self.tabBarController setSelectedIndex:0];
}
self.view.tag = 0;
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if (self.view.tag ==1) {
[[segue.destinationViewController view] setTag:1];
} else {
[[segue.destinationViewController view] setTag:0];
}
self.view.tag = 0;
}
- (void) viewWillDisappear:(BOOL)animated
{
self.view.tag = 0;
}
@end
ViewController3
覆盖的后退按钮,如果它是view.tag是设置为1.如果您希望上下文的后退按钮保持一致,则还需要覆盖默认行为。你将无法获得标准的后退按钮来查看这种覆盖行为。
// ViewController3.m
#import "ViewController3.h"
@implementation ViewController3
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.view.tag == 1) {
self.navigationItem.leftBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"0.0"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
}
self.view.tag = 0;
}
- (IBAction)goBack:(id)sender {
[[[[self.navigationController viewControllers]
objectAtIndex:0] view] setTag:2];
[self.navigationController popToRootViewControllerAnimated:YES];
}
@end