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

在UINavigationController堆栈中"弹出"多个视图控制器

在UINavigationController堆栈中"弹出"多个视图控制器器,可以使用以下方法:

  1. 使用popToViewController:animated:方法
代码语言:swift
复制
func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]?

该方法会将当前导航控制器的堆栈中的视图控制器弹出,直到找到指定的视图控制器,并返回一个包含被弹出视图控制器的数组。

示例代码:

代码语言:swift
复制
if let viewControllerToPopTo = self.navigationController?.viewControllers.first(where: { $0 is YourViewController }) {
    _ = self.navigationController?.popToViewController(viewControllerToPopTo, animated: true)
}
  1. 使用setViewControllers:animated:方法
代码语言:swift
复制
func setViewControllers(_ viewControllers: [UIViewController], animated: Bool)

该方法可以用来设置当前导航控制器的堆栈中的视图控制器数组,从而实现弹出多个视图控制器的效果。

示例代码:

代码语言:swift
复制
if let viewControllerToPopTo = self.navigationController?.viewControllers.first(where: { $0 is YourViewController }),
   var viewControllers = self.navigationController?.viewControllers {
    if let index = viewControllers.firstIndex(of: viewControllerToPopTo) {
        viewControllers.removeSubrange(index+1..<viewControllers.count)
        self.navigationController?.setViewControllers(viewControllers, animated: true)
    }
}

在这两种方法中,第一种方法更加简单,而第二种方法则更加灵活,可以实现更复杂的操作。

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

相关·内容

UINavigationController 导航控制器概念属性方法

概念 UINavigationController 继承于 UIViewController 包含:viewcontrollers、NavigationBar、Toolbar 导航控制器是一个堆栈结构,...(iOS7之后,导航右划会进行pop操作,设置这个的enable可以控制设置手势是否失效) @property(nullable, nonatomic, readonly) UIGestureRecognizer...这个方法是为了iOS方法的命名统一,导航,其作用和push一样 - (void)showViewController:(UIViewController *)vc sender:(nullable...= YES; [super pushViewController:viewController animated:animated]; } (2)弹出一个视图控制器 返回的是pop的controller...- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated; (3)弹出到某个视图控制器 返回所有pop的controller

2.1K60

iOS开发UINavigation系列四——导航控制器UINavigationController

iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言         在前面的博客,我么你介绍了UINavigationBar,UINavigationItem...controller的管理         导航控制器是一个堆栈结构,只是其中管理的对象是controller,通过push与pop进行controller的切换,我们有两种方式可以创建导航控制器: /...:(UIViewController *)viewController animated:(BOOL)animated; //弹出一个视图控制器 返回的是pop的controller - (nullable... UIViewController *)popViewControllerAnimated:(BOOL)animated; //弹出到某个视图控制器 返回所有pop的controller - (nullable...//iOS7之后,导航右划会进行pop操作,设置这个的enable可以控制设置手势是否失效 @property(nullable, nonatomic, readonly) UIGestureRecognizer

1.8K20
  • Cocoa编程中视图控制器视图类详解

    [[MyViewController alloc] init]];   [window addSubview:nav.view];   UINavigationController如何推入和弹出视图控制器...NavigationController的堆栈 的话(即是被推送过来的),则视图控制器的这个属性就指向那个NavigationController,否则为nil。...UITabBarController类       选项卡类允许用户多个视图控制器之间移动并在屏幕的底部可定制该栏。...实现UITabBarControllerDelegate委托的视图控制器重写init方法来自定义UITabBarItem条目。...控制器加载视图过程 当调用视图控制器的view属性时,视图控制器会先调用loadView方法加载视图,因此,可以loadView方法创建所有的视图,这是比较好的编程惯例。

    5.1K50

    iOS多控制器UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

    控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单 当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view...此属性是UINavigationController的,它可以一次添加多个控制器; 4,最正常的用法: pushViewController,入栈的方式添加自控制器。...UITableBarController UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换...UITabBarButtonUITabBar得位置是均分的,UITabBar的高度为49。 UITabBar的结构⼤大致如下图所示: ?...:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示的顺序和添加的顺序一致,和导航控制器不同,展现在眼前的是导航控制器的根视图控制器也就是第一个添加到导航控制器上的视图

    1.3K40

    iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

    为App初始化一个默认UIWindow对象 AppDelegate.m需要初始化一个window属性,作为后面往App添加视图的容器 1....#pragma mark - 获取根视图的(导航、标签)视图控制器 + (UINavigationController *)getRootVCformViewController { UIViewController...自定义的UIWindow添加自定义视图 假设想为一个APP添加一个手势验证的页面,当进入APP弹出这个手势验证页面。...如果不想影响原来的UIWindow,可以考虑新建一个UIWindow并覆盖原来的UIWindow,并往新建的UIWindow上添加各种手势相关的视图控制器。...UIWindow属性windowLevel,或者有同级windowLevel的其它UIWindow后来改变过显示状态(如.hidden=NO,makeKeyAndVisible等),可能会导致下拉菜单的弹出视图无法显示

    7.9K10

    iOS页面切换的几种方式

    从一个视图控制器切换到另一个视图控制器的几种方式 模态(modal)画面显示方式 //显示模态画面 [self presentModalViewController: ... animated:...:BViewController,CViewController 点击按钮之后B与C视图之间切换–多用于一个页面中有时要显示或隐藏某个View [self.view insertSubview...navThird, navFourth, navFifth]; self.window.rootViewController = self.tabBarController; //将根控制器视图加到应用程序的主窗口...[self.window addSubview: self.tabBarController.view]; 4.UINavigationController实现多层画面跳转,导航控制器,载入有层级关系的界面...[self.navigationController pushViewController: ... animated: ... ]; //弹出后返回到原视图 [self.navigationController

    2.5K10

    ios入门之界面基础

    视图控制器(View Controllers) 视图控制器是MVC(Modl-View-Controller)模式的逻辑部分。按照字面意思,这个控制器能够控制某个视图。...UINavigationController 我们在编写一个ios软件的时候,往往不只一个界面,界面之前跳转我们常常会用到navigation controller这么一个东西。...一个UINavigationController可以在数组中支持多个UIViewController,导航控制器(navigation controller)按照先进后出的堆栈管理原则对我们创建的UIViewController...滚动视图中的每一行叫做cell,cell是用了展示table view每行的内容。table view可以有很多个cell,多个cell组成section(组)。...Delegation 很多的OA软件,往往都有定时提醒这么一个功能。App内部发生某个事件时,就会发出提醒,为某个事件订阅或者接收提醒的过程叫做delegation(委托)。

    1.7K80

    iOS13 Scene Delegate

    在上面的代码,我们可以手动地设置了视图控制器堆栈,稍后会进行详细介绍。...application(_:didDiscardSceneSessions:) : 分屏关闭其中一个或多个scene时候回调用,可以该函数销毁场景所使用的资源。...Enable Multiple Windows: 默认为NO,其设置为YES可以支持多个窗口。 Application Session Role: 是一个数组,用于应用程序声明场景。...接着为SwiftUI项目创建了ContentView实例,并通过使用UIHostingController将其添加为根视图控制器。 该控制器用于将基于SwiftUI的视图显示屏幕上。...scene(_: willConnectTo: options: )函数内,创建一个SwiftUI视图,将其放置托管控制器,然后将控制器分配给window属性的根视图控制器,并将该窗口放置应用程序

    5.3K20

    玩转iOS转场动画 原

    本篇博客主要深入讨论视图控制器、导航控制器来进行界面跳转时的专场动画相关内容。...二、UIViewController进行模态跳转的转场     首先,使用CoreAnimation框架的CATransition类也可以实现视图控制器的转场动画,前面的博客有过讨论,这里不再重复。...presentViewController这个函数使用率可谓是非常高的,默认的转场动画为新的视图控制器从下向上弹出,dismissViewControllerAnimated函数的返回动画则是弹出动画的逆序播放...界面跳转时,将要弹出视图控制器设置如下: ViewController2 * v2 = [ViewController2 new]; self.transDelegate = [[TransDelegate...我们使用系统的导航控制器时,右划返回效果对用户体验十分友好,我们下面就来试着将视图控制器的模态跳转设计成类似导航可交互的。

    1.3K51

    iOS 超简单抽屉效果(MMDrawerController)的实现

    下面是用手势实现抽屉的拉出和收回 1.初始化跟视图控制器时,AppDelegate中导入头文件 #import "MMDrawerController.h" 2.初始化方法先初始化左视图和中心视图...MMDrawerController,初始化抽屉控制器时需要将左视图控制器和中心视图控制器添加到抽屉视图控制器上。    ...* leftNC = [[UINavigationController alloc] initWithRootViewController:leftTVC];     //初始化抽屉视图 控制器    ...1.中心视图 控制器添加头文件 #import "UIViewController+MMDrawerController.h"//第三方封装的头文件 #import "MMDrawerBarButtonItem.h..."//第三方封装的头文件 #import "LeftDrawerTableViewController.h"、、左视图头文件 2.viewDidLoad实现添加左抽屉控制按钮的方法 [self

    1.5K20

    iOS:分割控制器UISplitViewcontroller

    分割控制器UISplitViewController 功能:它也是ipad的一个新特性,屏幕上可以同时显示两个控制器,左边一个,右边一个;左边的为主控制器,右边的为详细控制器,主控制器可以根据需要显示或隐藏...它对于iPhone虽然可以使用,但是不具备同时显示的特点,iPhone的样式,就是导航控制器切换的模式。...2、导入几张素材图片,用来详细控制器显示。...所有的文件截图为: 3、下面就是具体的代码创建了: //AppDelegate.m文件: 导入头文件并声明必要的属性,同时实现分割控制器的协议 #import "AppDelegate.h" #import...文件 设置视图背景颜色 - (void)viewDidLoad { [super viewDidLoad]; //设置视图颜色为白色 [self.view setBackgroundColor

    2K30

    iOS开发之登录与访客

    自我革命——发现问题 开发,一直有这样一种情境:App的未注册用户可以使用部分功能(访客视图),一旦需要使用一些核心功能或者获取个性化、差异化的服务时,就需要用户登录(登录定制)。...一般的情况是: 用户点击某个按钮 ——> 弹出登录界面 ——> 输入信息 ——> 登录验证 ——> 界面发生变化 几年前做开发时,由于项目需要快速上线,所以顾不上思考(其实是自己太菜),直接在需要判断登录的界面代码里写上如下代码...} 突然有一天,我们发现某些App访客视图相似度非常大,某些App的登录界面也是一样的,于是发现上面的代码还是需要精简,于是我们将上面的else部分也上移到父类,也就是父类判断用户是否登录...UITabBarController嵌套UINavigationController.png 一开始,进入的时候,都显示访客界面,颜色为青色,点击中间的+弹出登录界面,点击登录界面的+表示登录过程,然后主界面显示登录后的各个界面...否则就显示正常界面 //但是注意 子视图同样需要在viewDidLoad判断用户是否登录 //登录界面 应该重新赋值window的rootViewController 刷新控制器的状态

    1.1K70

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

    交互控制器 – 这个类是用来管理交互的-那些通常由某个手势空控制的交互,允许用户通过滑动,轻扫或执行其他操作来实现两个视图控制器的导航.必须指出的是,交互控制器允许导航取消,例如,一个用户可以正在导航至某一页面时...使用动画控制器 AnimationControllers 文件夹中提供了许多可以整合进你的工程的动画控制器: 自定义模态控制器显示/隐藏的动画 UIViewControllerTransitioningDelegate...协议被用来模态控制器显示/隐藏时提供一个动画控制器.当一个视图控制器被模态显示或隐藏时,它的transitioningDelegate属性用来提供UIViewControllerTransitioningDelegate...交互控制器和动画控制器配合使用,可以实现交互式的动画转场效果,比如可以让用户通过手势来控制页面间的导航.交互控制器允许用户一个转场动画中前进,后退,甚至退出....交互控制器负责给视图添加手势,并负责在用户使用某个手势时进行相应地导航操作.

    1.6K60
    领券