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

双击UITabBarController时防止自动popToRootViewController

双击 UITabBarController 时防止自动 popToRootViewController 的方法如下:

  1. 在 UITabBarController 中监听双击事件。
  2. 在监听方法中,获取当前选中的 UINavigationController。
  3. 判断当前 UINavigationController 的 viewControllers 数组中是否有需要的 UIViewController。
  4. 如果有需要的 UIViewController,则将当前 UINavigationController 的 viewControllers 数组中的所有 UIViewController 弹出,直到找到需要的 UIViewController。
  5. 如果没有需要的 UIViewController,则不进行任何操作。

下面是示例代码:

代码语言:swift
复制
class CustomTabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        tapGestureRecognizer.numberOfTapsRequired = 2
        view.addGestureRecognizer(tapGestureRecognizer)
    }
    
    @objc func handleTap(sender: UITapGestureRecognizer) {
        guard let selectedViewController = selectedViewController else { return }
        guard let navigationController = selectedViewController as? UINavigationController else { return }
        guard let viewControllers = navigationController.viewControllers else { return }
        
        let targetViewController = viewControllers.first(where: { $0 is YourTargetViewController })
        
        if let targetViewController = targetViewController {
            navigationController.popToViewController(targetViewController, animated: true)
        }
    }
}

这个代码示例中,需要将 YourTargetViewController 替换为实际需要的 UIViewController 类名。

这个方法可以防止双击 UITabBarController 时自动回到根视图控制器,并且可以在需要的时候回到指定的视图控制器。

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

相关·内容

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

ViewController: 一类用来展示内容,例如UIViewController,UITableViewController 一类用来作为容器,例如UINavigationController,UITabBarController...ViewController都是通过持有一个ViewController的数组来管理,一般来讲UINavigationController是通过先进后出(First In Last Out)的方式来管理,而UITabBarController...通过解析源码的方法,发现UINavigationController不仅有简单的pushViewController和popViewController,还有popToViewController以及popToRootViewController...但ViewController自己不会自动保存其他的状态。         ...3.5 多页面的内存管理         每个UIViewController的类都会有自动的内存管理,通过didReceiveMemoryWarning这个方法来释放不需要的内存,进而管理low-memory

1.8K40

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

导航控制器自动构建并处理Back按钮; 3. 导航控制器提供简单的菜单栏可帮助用户进行自定义控件。4....作为弹出回上一级视图控制器的Back按钮是自动产生并处理的,无需用户干预。 3. 可使用popViewControllerAnimated:BOOL弹出当前视图控制器并向左显示前一个视图。 4....C代码   // 创建一个UITabBarController对象 UITabBarController *tabBarController = [[UITabBarController alloc]...• –viewDidLoad:当加载控制器的视图到内存,该方法被调用。...事件处理 如图所示,一般情况下,当一个视图不响应用户事件,它会将事件传递给它的父视图。但是,当视图被视图控制器管理,它会将事件首先传递给视图控制器。

5K50

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

通过上面的代码获取statusBar,发现每次每次获取都调用 alloc:init的方法,重新生成一个statusBar;然后添加到UIApplication的keyWindow上,再设置背景颜色。...make.top.equalTo.offset(kAdjustRatio(44)); }]; } return _imgLable; } 推荐使用自动布局...self.navigationController.navigationBar.frame.size.height; NSLog(@"导航栏高度:%f",navHeight); //获取tabBar的高度 //1.在tabBarController中使用(你的继承自UITabBarController...tabBarHeight = self.tabBar.frame.size.height; NSLog(@"tabBar高度:%f",tabBarHeight); //2.在非tabBarController中使用 UITabBarController...*tabBarVC = [[UITabBarController alloc] init];//(这儿取你当前tabBarVC的实例) CGFloat tabBarHeight = tabBarVC.tabBar.frame.size.height

1.7K40

iOS开发中标签控制器的使用——UITabBarController

iOS开发中标签控制器的使用——UITabBarController 一、引言         与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是...二、创建一个标签控制器         通过如下的步骤,我们可以很简便的创建一个TabBarController: UITabBarController * tabBar= [[UITabBarController...三、UITabBarController的属性和方法 //管理的viewController数组 @property(nullable, nonatomic,copy) NSArray<__kindof...//枚举如下 typedef NS_ENUM(NSInteger, UITabBarItemPositioning) {     UITabBarItemPositioningAutomatic,//自动...:(UITabBar *)tabBar didBeginCustomizingItems:(NSArray *)items;            //将要进入编辑状态

1.5K20

实践-小细节Ⅶ

UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil]; } } 4.如何实现扫描一次蒲公英安装二维码后,内测版APP自动提示更新...iOS内测版实现自动检查更新 Android内测版实现自动检查更新 如果有更新版本则会提示用户前往更新,如图所示: image 注:因操作系统限制,iOS 11及之后版本,当用户点击安装新版本后,会跳转到蒲公英应用单页...暂时消失"); }else { NSLog(@" 出栈了"); } } 6.程序之间的相互调用 在我们的iOS开发中,我们常常会遇见在程序中打开第三方应用的功能,比如美团付款打开支付宝...判断某一个对象是什么类 UIWindow *window = [[[UIApplication sharedApplication]delegate]window]; if ([vc isKindOfClass:[UITabBarController...UINavigationController alloc]initWithRootViewController:vc]; } 这里很容易错误的写法是: [vc.class isKindOfClass:[UITabBarController

80020

iOS项目——基本框架搭建

的顺序保持一致 当添加的barItem个数 <= 5个,均匀分布在最下面的bar条上,如上图所示的4个 当添加的barItem个数 > 5个,会只显示前四个添加的barItem,然后加上一个【more...setViewControllers: 示例代码如下,自定义一个TabBarController继承自UITabBarController,然后重写其 viewDidLoad 方法添加子视图和标签:...]; [self addChildViewController:vc]; } @end 三 UITabBarItem设置    在iOS开发过程中,系统自带的空间有时候会将有些图片显示出来时自动渲染成蓝色...,例如自带的TabBarItem在选中的图片,还有设置UIButtonTypeSystem样式按钮的图片,这时候系统都会自动渲染成蓝色。...再次产生一张不会进行渲染的图片 // 加载图片 UIImage *tempImage = [UIImage imageNamed:@"tabBar_essence_click_icon"]; // 产生一张不会进行自动渲染的图片

1.7K80

iOS 本地推送概念步骤:属性:点击通知跳到指定控制器界面快捷回复功能(iOS 8以后可用), category 属性的使用方法

带一个索引2的参数,点击通知打开程序后自动跳到第三个控制器(TabBarController) localNotifi.userInfo = @{@"selectIndex" : @(2)}; 13、设置分类...(相当于自动点击了通知),这时候我们需要对程序的状态进行判断,如果在前台接收到通知不进行任何操作或提示用户是否进行跳转 UIApplication 单例的一个方法可以查看程序当前的状态 @property...NSString *selectIndex = localNotifi.userInfo[@"selectIndex"]; // 获取根控制器TabBarController UITabBarController...*rootController = (UITabBarController *)self.window.rootViewController; // 跳转到指定控制器 rootController.selectedIndex...QQ自动回复效果图 案例的效果: ? 案例效果 设置快捷回复之后锁屏左滑会出现如下样式 ?

2.4K60

(ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)

DFGhkjDRTFyguhiYUTRTyRYTUiiuyruIUHgf安装教程:01卸载你电脑上所有非2020版本的Adobe软件可能是兼容性的问题,如果你的电脑上安装了不同年代版本的Adobe软件,安装2020会出现安装失败的问题具体步骤...别人说电脑里如果已经安装了它,就可以跳过这些步骤直接安装PS,但为了防止出现版本问题各种报错,还是推荐全部卸载干净重新双击安装哈~双击这个安装:双击后你就可以看到这个界面啦:虽然有4种登录方式,但下面三个在国内根本登不上哦...登录好它就自动开始安装啦!安装好之后可能会自动弹出这个窗口或者其他乱七八糟的窗口,直接右上角X掉无视就行。03安装Photoshop2020安装好前者后,就可以开始安装PS本体啦!...双击前面的文件夹,选择set-up打开就可以安装了:▼【双击】打开那个文件后,就可以看到这个窗口了:位置这一栏,一!定!不!要!选择默认位置!...然后它就自动开始安装了:04安装成功,创建快捷方式很多人会发现,安装成功后,桌面上是找不到PS的。

1.5K10

六天完成一个简单iOS App - 第三天

在请求数据,可以现在请求成功之后,将服务器返回的数据写到plist文件中存放到桌面,这样便于我们对返回数据层次结构的理解和里面数据的查阅 // 写出plist文件到桌面 便于我们看 // [responseObject...UITabBarController *tabBarVC = (UITabBarController *)self.window.rootViewController; UINavigationController...*tabBarVC = (UITabBarController *)self.window.rootViewController; [tabBarVC presentViewController:webView...cell; } 另外,我们需要给CLClearCacheCell添加tap手势,确保缓存文件大小计算完毕之后,才可以点击CLClearCacheCell清除缓存,当给cell添加tap手势之后,就会自动覆盖...并且当正在计算,将第一行cell滑出屏幕,在返回发现小菊花已经不在了,我们可以通过重写cell的layoutSubviews,重新设置cell小菊花start,因为每当cell显示的时候都会调用layoutSubviews

871110

Golang语言情怀--第111期 全栈小游戏开发:第2节:场景制作-场景资源

在 Cocos Creator 中,游戏场景(Scene)是游戏开发组织游戏内容的中心,也是呈现给玩家所有游戏内容的载体。...切换场景 在 资源管理器 中,通过双击场景文件打开场景。 如果需要在游戏过程中切换场景,可通过 director.loadScene 等 API 来实现游戏中动态场景加载及切换。...场景属性 双击打开场景文件后,可以看到 层级管理器 中的 scene 是场景节点树的根节点。...双击打开场景文件后,在 层级管理器 选中 scene 节点,即可在 属性检查器 中设置场景是否自动释放: 从当前场景切换到下一个场景,如果当前场景不自动释放资源,则该场景中直接或间接引用到的所有资源(...防止特定资源被自动释放 启用了某个场景的资源自动释放后,如果在脚本中保存了对该场景的资源的“特殊引用”,则当场景切换后,由于资源已经被释放,这些引用可能会变成非法的,有可能引起渲染异常等问题。

17420
领券