首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Swift中,如果我有一个UITabBarController,如何在切换选项卡之前popToRootViewController我当前的navigationController?

在Swift中,如果你有一个UITabBarController,并且想在切换选项卡之前将当前的navigationController的视图控制器栈回到根视图控制器,你可以使用以下方法:

  1. 首先,获取当前选中的导航控制器:
代码语言:txt
复制
if let navigationController = tabBarController.selectedViewController as? UINavigationController {
    // 在这里执行popToRootViewController操作
}
  1. 然后,调用导航控制器的popToRootViewController方法:
代码语言:txt
复制
navigationController.popToRootViewController(animated: false)

这将会立即将导航控制器的视图控制器栈回到根视图控制器,并且不会有过渡动画。

完整的代码示例:

代码语言:txt
复制
if let navigationController = tabBarController.selectedViewController as? UINavigationController {
    navigationController.popToRootViewController(animated: false)
}

这样,在切换选项卡之前,你就能够将当前导航控制器的视图控制器栈回到根视图控制器了。

注意:以上代码示例假设你的UITabBarController的选中视图控制器是UINavigationController或其子类。如果你的UITabBarController的选中视图控制器不是UINavigationController,你需要根据实际情况进行相应的类型转换。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Cocoa编程中视图控制器与视图类详解

;   提示:UIViewController 有一个属性是navigationController,如果当前ViewController在某个NavigationController的堆栈中 的话(即是被推送过来的...UITabBarController类       选项卡类允许用户在多个视图控制器之间移动并在屏幕的底部可定制该栏。...一、创建UITabBarController 常见的在应用程序委托类的applicationDidFinishLaunching:方法中创建,这通常可为应用窗口提供根视图。...[window addSubview:tabBarController.view];   当然在应用程序委托AppDelegate类中创建UITabBarController,相当于创建了一个基于...不过,也可以视具体情况,我们直接在一个独立的视图控制器中创建UITabBarController实例对象,如自定义一个用于视图 切换的控制器类ViewSwitcherViewController,就可在其中的

5.1K50
  • iOS导航栏切换界面时隐藏和显示

    ,往往又需要重新显示导航栏,关于这样一种设计苹果并没有给出专门的设置,需要我们自己来做,但在尝试了多种方法之后其实也没有很好的方法,QQ其实做的挺好的,如果你现在动手去尝试一下,会发现它的有无导航栏转换之间有一个渐变的毛玻璃效果...本文只讲最简单的实现方式,在单纯的UINavigationController下是表现ok的,但是如果同时还涉及到UITabbarController,就会有一些瑕疵,下面是要实现的效果,可以观察一下瑕疵在哪...setNavigationBarHidden:NO animated:YES]; } 但是如果选择了动画隐藏,在通过Tabbar切换模块时就会出现一个很快的隐藏导航栏的动画,这个很烦,我尝试了很多方法...]; self.navigationController.navigationBar.shadowImage = [UIImage new]; 但是在切换到要显示导航栏的界面时,我们还需要将透明的导航栏背景还原回来...这里有一篇文章实现了:传送门:导航栏的平滑显示和隐藏 - 个人页的自我修养(1) ,不过作者使用swift实现的,用到了extension,其实也就是OC下的category,之后我再研究一下OC下的实现好了

    3.9K30

    大前端开发中的路由管理之四:iOS篇

    3、多页面栈的管理方法         有了上文的铺垫,接下来可以更加细致地介绍iOS中多页面栈的管理方法。正如之前提到的,多页面即多个View。...而点击应用上方的NavigationBar返回按钮(如果没有隐藏起来的话)就会pop当前的ViewController,也就是返回上一层。...一张图概括NavigationController的结构 3.2 通用的页面切换方式         容器类的ViewController通过一个特定的结构来实现多层级管理,但并不是所有页面都能确保是在同一个容器中...,给他赋予一个NSString的值,会让ViewController在App被放到后台之前完成编码(保存)。...如果自己实现一个容器类的ViewController,就需要自己去给子视图控制器编码,保证每一个都必须是有独一无二的 restorationIdentifier。

    1.9K40

    UI篇-UITabBar及其相关其他知识

    Paste_Image.png UITabBar 下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton...在上面的程序中,UITabBarController有4个子控制器,所以UITabBar中有4个UITabBarButton,UITabBar的结构⼤大致如下图所示: ?...selectedViewController属性 通过该属性可以获得当前选中的viewController 每个视图控制器都有一个tabBarController属性,通过它可以访问所在的UITabBarController...每个视图控制器都有一个tabBarItem属性,通过它控制视图在UITabBarController的tabBar中的显示信息。...self.hidesBottomBarWhenPushed = YES; } //如果在push跳转时需要隐藏tabBar,需要在最外层的VC中跳转之前设置 // block 回调中跳转 需要紧紧写在跳转的前后

    2K20

    Ios常用第三方框架(二)

    比如,之前要实现一个填写各种资料的列表,可能需要很多代码,现在只需要几行代码就可以实现。 UIScrollSlidingPages - 允许添加多视图控件,并且可以横向滚动。...LxTabBarController - 改变了原生tabbar切换tab时的生硬效果,并加入滑动切换手势(有和界面上的其它手势发生冲突的风险,可根据具体项目予以关闭),swift版本。...WXTabBarController - 在系统 UITabBarController 的基础上完美实现了安卓版微信 TabBar 的滑动切换功能,单手操作 iPhone 6 Plus 切换 TabBar...MGSwipeTableCell - 另一个常见于很多应用中的UI组件,苹果应该考虑在标准的iOS SDK中加入一些类似的内容。Swipeable表格cell是这个pod的最佳描述,也是最好的。...SwipeViewController.swift - 一款好用的页面滑动和标签选项卡类库及示例。

    7.7K60

    VCTransitionsLibrary –自定义iOS交互式转场动画的库

    简介 VCTransitionsLibrary 提供了许多适用于入栈,出栈,模态等场景下控制器切换时的转场动画.它本身提供了一个定义好的转场动画库,你可以拖到自己工程中直接使用;也提供了许多拥有不同转场动画效果...使用 在自定义转场动画时,有两类关键的类: 动画控制器 –  这个类是用来实现自定义动画的.但你声明想要使用自定义动画时,你应该提供一个动画控制器.这个类会实现需要的动画,完成时会通知框架....自定义顶部导航的转场动画 UINavigationController 有一个 id delegate 属性.只需要让它的代理通过 navigationController...UITabBarController 有一个 id delegate属性,只需要让它的代理通过tabBarController: animationControllerForTransitionFromViewController...,比如可以让用户通过手势来控制页面间的导航.交互控制器允许用户在一个转场动画中前进,后退,甚至退出.

    1.6K60

    【IOS开发基础系列】Storyboard专题

    1 简介 1.1 故事板简介         如果你的 app 有大量的窗口,故事板能帮你减少许多用于从一个窗口转到另一个窗口的导航代码。...运行程序,现在第一个 Tab 已经变成了NavigationController。         在我们将实际的功能加入 app 之前,让我们整理一下我们的故事板。...与之相仿,在 NavigationController 所包含的ViewController上,有一个 NavigationItem 对象,可用于设置导航栏。...前者更为简单,因此我使用了前者。 注意:如果你事先无法确定 cell 高度,或者你有不同高度的几种 cell,你应该使用heightForRowAtIndexPath。         .../details/7565690 3.1.4 一个VC继承自另一个VC,对于父类的View,如果子类初始化时想不一样大小,如何在故事板中处理 4 开发技巧 4.1 View分辨率 4.1.1 wAny和

    1.3K30

    【IOS开发基础系列】Navigation页面导航专题

    中的 navigationItem并不是同一个对象,如下图所示。...: (UIViewController*) viewController animated: (BOOL)animated{     //如果进入的是当前视图控制器     if (viewController...    方法一:(自定义视图的方法,一般人也会采用这样的方式)         就是在导航向上添加一个titleView,可以使用一个label,再设置label的背景颜色透明,字体什么的设置就很简单了...否则会导致页面切换时选中状态不准确         TabBar与导航条混用时,TabBarItem的设置是在NavigationController中,而不是内容Controller中,切记!!!...2.5.8 Tabbar的显示与隐藏 Tabbar的隐藏函数,其实只在Nav Push的之前调用时起作用 //隐藏Tabbar [viewController setHidesBottomBarWhenPushed

    45520

    iOS初步集成极光推送后你还要做这些事

    、Sound、Alert三种类型可以选择设置 } 上面代码我选择了一个提示的第三方TSMessage在点击消息的时候做了一个跳转。...在调用这个三方的时候你首先要获取当前顶层控制器赋值给这个三方。...,当你跳转指定控制器的时候,你有必要判断当前控制器是否可以push过去,即有没有导航栏,如果没有则不能push,当然也可以像我这样先跳转到个人中心,保证有导航栏,但是这样的处理也许不适用你的app....自定义消息,这个比较特殊,它必须是在app正在前台的时候才能收到消息,收到消息的位置而且不在代理中,而是在一个通知中。 ? 当注册极光后可以加入下面代码。注册一个通知。...○ 怎么在app内部开启、关闭通知? 一般都在app设置中有一个switch的开关。来开启关闭通知,代码很简单,直接贴上来。有一点需要注意,就是这个开关的状态需要存到本地,有高要求的存服务器。

    2.8K50

    iOS小技能:设置状态栏背景颜色(图片)

    补充:如果整个项目的状态栏(电池栏)都是有颜色的,并且都是不透明的,上面这个方法完全可以应付。...但是如果有状态是有透明或者半透明的效果,上面这个方法还是不能胜任,越透明越明显;经过一番查找,终于发现问题: 问题: 1、iOS 13之前,可以通过valueForKey 获取UIApplication...方法有很多,我的方法代码如下:使用 static 配合 gcd HSSingletonM(QCTStatusBarTool); + (void)setStatusBarBackgroundColor4ios13...; NSLog(@"导航栏高度:%f",navHeight); //获取tabBar的高度 //1.在tabBarController中使用(你的继承自UITabBarController的VC) CGFloat...中使用 UITabBarController *tabBarVC = [[UITabBarController alloc] init];//(这儿取你当前tabBarVC的实例) CGFloat tabBarHeight

    2K40

    iOS项目——基本框架搭建

    TabBar + NavigationController就是在应该TabBar上添加itemBar,每一个itemBar都是一个独立的模块,并且每一个itemBar都对应一个NavigationController...今天我们的主要任务就是搭建我们TabBar,如果采用系统自带的UITabBarController(官网文档戳这里),在使用过程有一下几点需要注意: 每一个barItem都必须对应一个ViewController...如果自定义设置了,注意不要遮挡最下面的TabBar条 barItem的顺序与添加到UITabBarController的顺序保持一致 当添加的barItem个数 在最下面的bar条上...,因此,在开发过程中,我们需要对我们的代码进行重构和简化,主要原则是尽量保持一个方法实现一个功能,然后尽量不写重复的代码,精简逻辑。...: // 字典中用到的key 1.iOS7之前(在UIStringDrawing.h中可以找到) - 比如UITextAttributeFont\UITextAttributeTextColor - 规律

    1.8K80

    iOS开发常用之网络

    该项目通过三种形式展示页面之间的切换,比如导航栏上的多个选项卡切换,页面左右两端箭头指示切换,以及使用分段控件。...LxTabBarController - 改变了原生tabbar切换标签时的生硬效果,并加入滑动切换手势(有和界面上的其它手势发生冲突的风险,可根据具体项目予关闭),swift版本。...WXTabBarController - 在系统UITabBarController的基础上完美实现了安卓版微信TabBar的滑动切换功能,单手操作iPhone 6 Plus切换TabBar一直是一件很痛苦的事情...SwiftyFORM - swift表单输入框架(亮点是表单验证规则引擎),是我见过地最易用的Swift表单组件。...更赞的是额外附了详细开发教程如何在Swift中制作Tinder-Like Koloda动画网页链接 .Yalantis出品动画程序款款精品。

    23.7K10

    【IOS开发基础系列】UIViewController专题

    (如,UINavigationController, UITabBarController)中动画没做完,然后又开始新的动画.。...3.1.4 Demo         还是那句话,一百行的讲解不如一个简单的小Demo,于是..it’s demo time~ 整个demo的代码我放到了github的这个页面上,有需要的朋友可以参照着看这篇文章...在现在的SDK中,如果当前的VC是被显示的话,这个消息会被直接转发到显示它的VC去。但是这并不是一个好的实现,违反了程序设计的哲学,也很容易掉到坑里,具体案例可以参看这篇文章的评论。         ...我们在手势识别中只需要告诉这个类的实例当前的状态百分比如何,系统便根据这个百分比和我们之前设定的迁移方式为我们计算当前应该的UI渲染,十分方便。...在刚才demo的基础上,这次我们用一个向上划动的手势来吧之前呈现的ModalViewController给dismiss掉~当然是交互式的切换,可以半途取消的那种。

    71830

    如何判断UITabBarController上的NavigationController没有被选中?

    https://blog.csdn.net/u010105969/article/details/53120115 最近在看《百思不得姐》这个项目,其中有一个功能:在某个页面再次点击此页面的tabBarButton...首先要判断点击的tabBarButton是否已经被选中,如果被选中,则再次点击会刷新页面。...这里有一个问题,每次重复点击某个tabBarButton的时候都会发出通知,而tabBarController上所有navigationController都要接收此通知,从而进行页面的刷新。...这也与本篇博客的题目相呼应:如何判断UITabBarController上的NavigationController没有被选中?......");     }else{ NSLog(@"当前控制器被选中");     } } 代码很简答,可之前却没有想到。

    79310

    iOS 自定义 ViewController 过渡动画

    view controller transitions 可交互过渡,例子就是在 NavigationController 的详细页面中从屏幕左侧滑入以返回时的那个动画。...有两个方法需要实现 // 这个方法负责做真正的动画,输入参数是过渡的上下文,从哪个VC过渡到哪个VC这些东西都可以从它得到。...然后在 viewDidLoad 中设置 TabBarController 的 delegate ,这里我们设置成为 self TabBarController 代码如下: class MainVC: UITabBarController...中那样在切换时改变状态栏颜色,这里可选,与过渡无关 func tabBarController(tabBarController: UITabBarController, didSelectViewController...并且开始时的path设置为上面的start——位置在点击的tab上的一个半径为0的圆。 // 下文中就要给这个path加特技,让他变化到包含整个界面那么大。

    1.4K31

    【iOS】仿知乎日报,RxSwift-Part1-首页搭建

    因此,我是在原来基础上,做了一些优化,虽然在转模型上没有那么优雅,但是比原来的安全。...然后tabbarVC添加两个控制器,一个为首页,一个为其他话题,然后隐藏tabbar,通过侧栏点击切换。如下图所示: ? 整体框架 首页搭建 1、导航栏的设置 先来看看效果图: ?...tableView的willDisplay方法中,监听section的变化,刷新条件是:当滚动到最后一个section的第一个元素时,加载更多数据 func tableView(_ tableView...那么针对上拉刷新,我是这样封装的,在我的MPApiService服务层中,定义了如下方法: func loadMoreHomeNewsList(date: String) -> Observable我也这么觉得,初入RxSwift,不打算封装太多层,怕把自己绕进去了,所以就先这样写了~ 4、设置导航栏的titile日期 效果说明:随着列表的滚动,sectionHeader的日期会显示在导航栏上

    2.4K10

    抓住iOS的未来 - 30天学习编写30个Swift小程序

    无意中听说了有一个叫Sam Lu在Twitter上发起了一个100天做40个Swift小程序的活动,再加上国内看到了Allen_朝辉写的Swift学习的文章,心里暗自下了一个决定:30天写30个Swift...其实我并不是唯一在国内发起这个30天30个Swift小程序并且将其开源的作者,但是我可能是唯一一个从头到尾用XCode 8 + Swift3环境编写的作者。...因此这里有一个依赖关系,因此用懒加载最合适。 Swift中的unowned和weak的区别: unowned更像OC里的unsafe_unretained; weak还是那个weak。...里的方法就好 - 如果切换动画只需要关注之前的VC和之后的VC,不需要关注中间过程,直接实现以下方法即可: navigationController(_ navigationController: UINavigationController...这也回答了别人问过我的问题,“如果我现在学iOS开发,是应该学OC还是Swift”: 我觉得从iOS SDK的熟悉角度来说,没有本质区别,如果熟悉OC下对应语法去使用Swift写没有太大区别。

    2.5K20
    领券