Ios 使用selectedViewController属性以编程方式切换选项卡

Ios 使用selectedViewController属性以编程方式切换选项卡,ios,uitabbarcontroller,Ios,Uitabbarcontroller,我已经用过搜索了,还没有找到答案 尝试这样切换: [self. tabBarController.selectedViewController OptionsViewContorller]; [self.tabBarController.selectedViewController = self.tabBarController.viewControllers objectAtIndex:3]; 就像这样: [self. tabBarController.selectedViewC

我已经用过搜索了,还没有找到答案

尝试这样切换:

[self. tabBarController.selectedViewController OptionsViewContorller];
 [self.tabBarController.selectedViewController = self.tabBarController.viewControllers     objectAtIndex:3];
就像这样:

[self. tabBarController.selectedViewController OptionsViewContorller];
 [self.tabBarController.selectedViewController = self.tabBarController.viewControllers     objectAtIndex:3];
但它不起作用,我也尝试和建议改变

self.tabBarController.selectedIndex
但它只在选项卡栏上更改,而不是在视图中更改。

这应该可以工作

// viewControllerIndex is an int describing the position of the viewController
// in the tab bar array index
[self.tabBarController setSelectedIndex:viewControllerIndex];
self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:3];
这应该行得通

self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:3];

//我正在使用此代码切换到tabbar视图控制器0,第一个视图控制器

self.tabBarController.selectedIndex = 0;

UIViewController *controller = [self.tabBarController.viewControllers objectAtIndex:0];
if ([controller isKindOfClass:[UINavigationController class]]) {
    [((UINavigationController*)controller) popToRootViewControllerAnimated:false];
}

[self.navigationController popToRootViewControllerAnimated:true];

//我正在使用此代码切换到tabbar视图控制器0,第一个视图控制器

self.tabBarController.selectedIndex = 0;

UIViewController *controller = [self.tabBarController.viewControllers objectAtIndex:0];
if ([controller isKindOfClass:[UINavigationController class]]) {
    [((UINavigationController*)controller) popToRootViewControllerAnimated:false];
}

[self.navigationController popToRootViewControllerAnimated:true];

如果要从UITabBarController类切换,则必须在-VIEWDIDDEABER:动画:


希望有此帮助。

如果您想从UITabBarController类中切换,则必须在-VIEWDIDEPOWER:动画:

希望对您有所帮助。

对于swift 4+

在显示视图之前,您必须获得对选项卡的引用

let tab = self.presentingViewController as! UITabBarController
self.dismiss(animated: true, completion:{ 
     tab.selectedIndex = 2
})
斯威夫特4号+

在显示视图之前,您必须获得对选项卡的引用

let tab = self.presentingViewController as! UITabBarController
self.dismiss(animated: true, completion:{ 
     tab.selectedIndex = 2
})


它只会在选项卡栏上更改选定的图标,但不会更改视图。如果选项卡栏图标正在更改,听起来像是在更改视图控制器-您确定选项卡栏中的视图清晰到足以识别它们的更改吗?它们完全不同。为什么会这样?图标变为活动状态,但视图不变。最好参考ios文档中的Tabster。一定是你做错了什么。我发现了问题,我的选项卡位于另一个控制器中。从该控制器工作正常,我如何从另一个控制器访问它?它只是更改选项卡栏上的选定图标,但不更改视图。如果选项卡栏图标正在更改,则听起来像是更改视图控制器-您确定选项卡栏中的视图清晰到可以识别它们的更改吗?它们完全不同。为什么会这样?图标变为活动状态,但视图不变。最好参考ios文档中的Tabster。一定是你做错了什么。我发现了问题,我的选项卡位于另一个控制器中。从该控制器工作正常,我如何从另一个控制器访问它?您使用的是哪个版本的iOS sdk?您使用的是哪个版本的iOS sdk?它只是在选项卡栏中更改选定的图标,但不更改视图。@Horhegaria是更改为正确的图标。如果图标和选项卡索引正确,请检查选定的视图控制器。点击选项卡索引,它的行为正常吗?我发现了问题,我的选项卡位于另一个控制器中。从该控制器工作正常,我如何从另一个控制器访问它?@Horhegaria使用委派模式在控制器之间进行交互它只更改所选图标选项卡栏,但不更改视图。@Horhegaria是更改为正确的图标。如果图标和选项卡索引正确,请检查选定的视图控制器。点击选项卡索引,它的行为正常吗?我发现了问题,我的选项卡位于另一个控制器中。从该控制器开始工作正常,我如何从另一个控制器访问它?@Horhegaria使用委派模式在控制器之间进行交互