Ios 如何从一个选项卡切换到另一个选项卡并返回?
我在浏览我的视图时遇到了一个小问题。 以下是我的配置: 我有一个Tabbar控制器,在导航控制器中嵌入了2个关系序列和2个简单视图。 现在,我想从视图控制器1导航到视图控制器3,还想在选项卡栏中显示所选的正确选项卡。如果我来自视图控制器1,我还希望后退按钮将我重定向到上一个选项卡。我尝试了在视图之间连接segue的方法,但如果我这样做,它只会将视图控制器推到导航堆栈上,而不会更改选项卡。所以我现在的问题是,管理这个问题的最好方法是什么 截图:Ios 如何从一个选项卡切换到另一个选项卡并返回?,ios,xcode,uinavigationcontroller,interface-builder,uitabbarcontroller,Ios,Xcode,Uinavigationcontroller,Interface Builder,Uitabbarcontroller,我在浏览我的视图时遇到了一个小问题。 以下是我的配置: 我有一个Tabbar控制器,在导航控制器中嵌入了2个关系序列和2个简单视图。 现在,我想从视图控制器1导航到视图控制器3,还想在选项卡栏中显示所选的正确选项卡。如果我来自视图控制器1,我还希望后退按钮将我重定向到上一个选项卡。我尝试了在视图之间连接segue的方法,但如果我这样做,它只会将视图控制器推到导航堆栈上,而不会更改选项卡。所以我现在的问题是,管理这个问题的最好方法是什么 截图: 这里有一个方法。但我发布这篇文章是为了说明为什么你不
这里有一个方法。但我发布这篇文章是为了说明为什么你不应该这么做
- 我使用VC2和VC3的视图标记属性来传递导航数据,这具有紧密耦合所有三个对象的效果李>
- 我覆盖VC1->VC3上下文的返回栏按钮。你失去了连贯性
- VC3->VC2提供反向动画。VC3->VC1从一个选项卡翻转到另一个选项卡时没有动画。更不一致
- VC1->VC3,点击选项卡项2,转换为VC2。用户界面混乱
有一个“跳到VC3”按钮,连接到跳到VC3:
//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”将我们切换到选项卡2,并将最前面视图的视图标记属性设置为1。如果最前面的视图是VC2,则会立即切换到VC3。如果最前面的视图是VC3,这将正确设置“后退”按钮。如果将其他视图控制器添加到此堆栈,则此导航将中断
视图控制器2有一个“移动到VC3”按钮,连接到故事板序列到VC3“到VC3” 视图控制器3
如果其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
这里有一个方法。但我发布这篇文章是为了说明为什么你不应该这么做
- 我使用VC2和VC3的视图标记属性来传递导航数据,这具有紧密耦合所有三个对象的效果李>
- 我覆盖VC1->VC3上下文的返回栏按钮。你失去了连贯性
- VC3->VC2提供反向动画。VC3->VC1从一个选项卡翻转到另一个选项卡时没有动画。更不一致
- VC1->VC3,点击选项卡项2,转换为VC2。用户界面混乱
有一个“跳到VC3”按钮,连接到跳到VC3:
//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”将我们切换到选项卡2,并将最前面视图的视图标记属性设置为1。如果最前面的视图是VC2,则会立即切换到VC3。如果最前面的视图是VC3,这将正确设置“后退”按钮。如果将其他视图控制器添加到此堆栈,则此导航将中断
视图控制器2有一个“移动到VC3”按钮,连接到故事板序列到VC3“到VC3” 视图控制器3
如果其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