• swift 防止push多次界面

    2018-09-27 15:59:03
    场景:快速多次点击cell跳转到另一个页面,另一个页面被push多次。 原因:push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面正好在reloadData卡住主线程。造成点击cell时卡住了。 解决方法:重写导航...

    场景:快速多次点击cell跳转到另一个页面,另一个页面被push多次。

    原因:push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面正好在reloadData卡住主线程。造成点击cell时卡住了。

    解决方法:重写导航控制器的push方法

    
    //  BaseNavigationViewController.swift
    
    import UIKit
    
    class BaseNavigationViewController: UINavigationController,UINavigationControllerDelegate {
        
        var pushing = false
        
        override func viewDidLoad() {
            super.viewDidLoad()
            interactivePopGestureRecognizer?.delegate = nil
            self.delegate = self
        }
        
        override var preferredStatusBarStyle : UIStatusBarStyle {
            return UIStatusBarStyle.lightContent
        }
    
        // MARK:UINavigationControllerDelegate
        func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
            self.pushing = false
        }
    
        override func pushViewController(_ viewController: UIViewController, animated: Bool) {
            if self.pushing{
                
               return//被拦截
                
            } else {// push 控制器
                
                self.pushing = true
    
                super.pushViewController(viewController, animated: true)
            }
            
        }
    }
    

     

    转载请标注:https://mp.csdn.net/postedit/82868459

    展开全文
  • 首先要在appDelegate里添加导航视图控制器navigationColler func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?...

    首先要在appDelegate里添加导航视图控制器navigationColler

        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            //        let viewController = ViewController()
            self.window = UIWindow(frame: UIScreen.main.bounds)
            //        把初始视图控制器压入导航视图控制器
            let navigationController = UINavigationController(rootViewController: FirstViewController())
            //        把根视图控制器设为导航视图控制器
            self.window?.rootViewController = navigationController
            //        渲染出页面
            self.window?.makeKeyAndVisible()
            return true
        }

    然后在初始视图控制器里添加代码(我这里是FirstViewContriller)

    //
    //  FirstViewController.swift
    //  页面跳转的几种方法
    //
    
    
    import UIKit
    //定义一个全局变量,用来记录当前显示器的编号
    var pageNum = 0
    
    class FirstViewController: UIViewController {
            
            override func viewDidLoad() {
                super.viewDidLoad()
                
                // Do any additional setup after loading the view.
                //        每次当前视图控制器创建一次,全局变量加一
                pageNum = pageNum + 1
                //        根据当前的全局变量名设置标题
                self.title = "Page\(pageNum)"
                self.view.backgroundColor = UIColor.purple
                //        添加一个页面跳转按钮
                let push = UIButton(frame: CGRect(x: 40, y: 120, width: 240, height: 40))
                push.setTitle("Push page", for: UIControlState())
                push.backgroundColor = UIColor.orange
                push.addTarget(self, action: #selector(pushPage), for: UIControlEvents.touchUpInside)
                self.view.addSubview(push)
                
                //        添加一个按钮,点击时返回上一个页面
                let pop = UIButton(frame: CGRect(x: 40, y: 180, width: 240, height: 40))
                pop.setTitle("Pop Page", for: UIControlState())
                pop.backgroundColor = UIColor.orange
                pop.addTarget(self, action: #selector(popPage), for: UIControlEvents.touchUpInside)
                self.view.addSubview(pop)
                
                //        添加一个按钮,点击时跳转到指定序号的页面
                let index = UIButton(frame: CGRect(x: 40, y: 280, width: 240, height: 40))
                index.setTitle("Goto Index Page", for: UIControlState())
                index.backgroundColor = UIColor.orange
                index.addTarget(self, action: #selector(gotoIndexPage), for: UIControlEvents.touchUpInside)
                self.view.addSubview(index)
                
                //        添加一个按钮,点击时跳转到根视图
                let root = UIButton(frame: CGRect(x: 40, y: 340, width: 240, height: 40))
                root.setTitle("Goto root Page", for: UIControlState())
                root.backgroundColor = UIColor.orange
                root.addTarget(self, action: #selector(gotoRootPage), for: UIControlEvents.touchUpInside)
                self.view.addSubview(root)
            }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
        
        //    创建第一个按钮绑定的方法打开页面(入栈)
        @objc func pushPage(){
            //        实例化第二个视图控制器
            let viewController = FirstViewController()
            //        把视图压入导航视图
            self.navigationController?.pushViewController(viewController, animated: true)
        }
        //    第二个按钮的方法,将导航视图控制器从堆栈中移除
        @objc func popPage(){
            self.navigationController?.popViewController(animated: true)
        }
        //    第三个按钮绑定的方法,根据全局序号,查找堆栈中指定序号的视图控制器
        @objc func gotoIndexPage(){
            let viewController = self.navigationController?.viewControllers[1]
            self.navigationController?.popToViewController(viewController!, animated: true)
        }
        //    创建第四个按钮绑定的方法,所有子视图出栈
        @objc func gotoRootPage(){
            self.navigationController?.popToRootViewController(animated: true)
        }
        
        
    }
    

    运行一下查看效果吧! 

     

     

    展开全文
  • 项目中处界面需要跳转到登录界面,方式有的是present,有的是push,但是跳转回来的时候二者有一个总有问题。 解决办法:在跳转回来的代码中通过遍历解决。 贴上代码,希望对大家有所帮助。代码如下: 1、...

    项目中多处界面需要跳转到登录界面,方式有的是present,有的是push,但是跳转回来的时候二者有一个总有问题。

    解决办法:在跳转回来的代码中通过遍历解决。

    贴上代码,希望对大家有所帮助。代码如下:


    1、其中的一个界面present进来的:

    UserManagerViewController *userManagerVC = [[UserManagerViewController alloc] init];
                    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:userManagerVC];
                    [self presentViewController:nav animated:YES completion:nil];


    2、还有一个界面是push进来的:

            [self.navigationController pushViewController:userManagerViewController animated:YES];


    3、跳转回来代码:

    #pragma mark - ButtonTarget
    - (void)backBtnClick:(UIButton *)btn {
        for (UIViewController *tempVC in self.navigationController.viewControllers) {
            if ([tempVC isKindOfClass:[UserManagerViewController class]]) {
                [self dismissViewControllerAnimated:YES completion:nil];
            } else {
                [self.navigationController popViewControllerAnimated:YES];
            }
        }
        
    }

    展开全文
  • //防止快速连续点击"提交"按钮,造成多次提交 @IBAction func submit(sender: UIButton) {    //防止连续点击造成多次提交的解决  self.submitBtn.enabled = false  var timer:NSTimer = NSTimer....
    //防止快速连续点击"提交"按钮,造成多次提交


    @IBAction func submit(sender: UIButton) {
            
     //防止连续点击造成多次提交的解决
     self.submitBtn.enabled = false
     var timer:NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "submiteButtonEnabbled", userInfo: nil, repeats: false)
            
     func submiteButtonEnabbled(){
            self.submitBtn.enabled = true
        }


    swift中延时执行的方法
    第一种:定时器
     var timer:NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "submiteButtonEnabbled", userInfo: nil, repeats: false)


    第二种:
    dispatch_after
    展开全文
  • ios开发navigationController pushViewController 方式多次跳转 怎么返回到最上层,怎么返回到指定的某一层

    ios开发navigationController pushViewController 方式多次跳转 怎么返回到最上层,怎么返回到指定的某一层


    以前一直有个很疑惑的问题没有搞清楚 

    关于ios中 viewcontroller的跳转问题,其中有一种方式是采用navigationController pushViewController 的方法,比如我从主页面跳转到了一级页面,又从一级页面跳转到了二级页面,然后从二级页面跳转到了三级页面,依次类推。,如果一级一级的返回我知道是没有问题的,调用navigationController popViewControllerAnimated就行了。。但是某些情况下我可能想要马上回到主页面,而不是一级一级的返回(如果有很多层会很累的),那该怎么办呢?

    返回根页面vc用 :

    ?
    1
    [self.navigationController popToRootViewController]

    返回指定的某个vc用下面(通过index定位) 

    ?
    2
    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];

    或(通过class定位)

    ?
    3




    for (UIViewController *controller in self.navigationController.viewControllers) {
        if ([controller isKindOfClass:[你要跳转到的Controller class]]) {
            [self.navigationController popToViewController:controller animated:YES];
        }
    }



    借鉴自  : http://my.oschina.net/wycdavid/blog/196278

    展开全文
  • 关于ios中 viewcontroller的跳转问题,其中有一种方式是采用navigationController pushViewController 的方法,比如我从主页面跳转到了一级页面,又从一级页面跳转到了二级页面,然后从二级页面跳转到了三级页面,...
  • 我们有时候在开发iOS的时候,涉及到跳转界面时,需要隐藏tabbar,以便我们重新定义新的。 OC版本的: //1....   self.tabBarController.tabBar.hidden=YES;...如果在push跳转时需要隐藏tabBar,设置self.hidesBot
  • 问题:今天遇到一个Bug,A控制器push到B控制器,B又push到A(可以无限push),第一次相互跳没有问题,之后A控制器会多次push,而且会越来越多次。 原因:点击A上的控件发送跳转到B的通知,但是由于之前push,A控制器...
  • 我们在使用present 方法进行页面的跳转时一般使用是: UIViewController * viewController = [UIViewController alloc] init]; [self presentViewController:viewController animated:YES completion:^{ ...
  • 转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerAnimated:completion:这一组函数以模态视图的方式展现、隐藏视图。如果用到了navigationController,还...
  • iOS跳转界面时隐藏tabBar的方法 //1.设置self.tabBarController.tabBar.hidden=YES; ...self.tabBarController.tabBar.hidden=YES;...//2.如果在push跳转时需要隐藏tabBar,设置self.hidesBottomBarWhenPushed=YE
  • 在界面之间跳转的时候,返回到指定界面的方法,这是一个非常实用的方法,也符合了很种情况需求,个人感觉很棒。 先举一个简单的例子说明一下,比如你从A界面跳转到B界面,然后再返回的时候,你不想从B界面跳转...
  • 造成的原因: 1.跳转的控制器在主线程做了过多了消耗动作。 2.跳转的控制器透明度和颜色是空, ...其实一个图片的透明度,剪切的方式,多次渲染以及机身与版本的兼容等等都会引起这种现象,只不过这种情况出现的几率很小
  • ##说明push的作用## push notifications allow developers to reach users and perform small tasks — even when users aren’t actively using an app! In this tutorial, you’ll learn how to configure your ...
  • iOS Swift 入门

    2018-04-20 08:49:51
    Swift 入门 概述 Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。 Swift 包含了 C 和 Objective-C 上所有基础数据类型,Int表示整型值; Double 和 Float 表示浮点型值; Bool 是布尔型值;...
  • 基于RXSwift 下 页面跳转进行解耦 非ViewController类实现页面跳转 基于我之前文章做法在部分项目中无法正常跳转,或者是调转到当前视图的底层去了 后来发现究其原因就是UITabbarController与...
  • Swift:在Safari中打开App

    2015-05-25 14:47:02
    打开之前会发生什么呢,先看看这个图: 我这里只是简单模拟了一下。当你输入一个特殊的“url”之后,Safari弹出一个提示,问你是否继续打开这个App。如果你这个时候confirm的话。那么这个App就会打开。...
  • iOS 控制器多次present后返回根控制器。
  • 栈内存的存储结构比较简单,你可以简单的理解为push到栈底pop出来这么简单,而要做的就是通过移动栈针来分配和销毁内存 堆内存相比栈有着更为复杂的存储结构,他的分配方式你可以理解为在堆中寻找合适大小的空闲...
  • popViewController
1 2 3 4 5 ... 20
收藏数 640
精华内容 256