zoukankan      html  css  js  c++  java
  • 导航栏pop拦截

    一、新建一个分类

    二、导入分类头文件

    三、需要拦截的地方实现方法   - (BOOL)navigationShouldPopTwo  即可

    .h
    #import <UIKit/UIKit.h>
     
    @protocol BackButtonHandlerProtocol <NSObject>
    @optional
     
    - (BOOL)navigationShouldPopTwo;
    @end
     
    @interface UIViewController (BackButtonHandler) <BackButtonHandlerProtocol>
     
    @end
     
    .m
     
    #import "UIViewController+BackButtonHandler.h"
     
    @implementation UIViewController (BackButtonHandler)
     
    @end
     
    @implementation UINavigationController (ShouldPopOnBackButton)
     
    //当控制器的Item需要pop的时候执行下面的方法(不管是手动返回,侧滑返回,代码pop都会调用下面方法)
    //返回YES,释放Item;返回NO,不释放当前Item
    - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
       
        NSLog(@"pop kzhiq:%ld items:%ld",self.viewControllers.count,navigationBar.items.count);
        //控制器数小于Item数时,必须直接pop 掉 item
        if([self.viewControllers count] < [navigationBar.items count]) {
            return YES;
        }
        BOOL shouldPop = YES;
        UIViewController* vc = [self topViewController];
        if ([vc respondsToSelector:@selector(navigationShouldPopTwo)]) {
     
            shouldPop = ![vc navigationShouldPopTwo];//这个方法里面执行了其他的pop操作
     
        }
        if(shouldPop) {//
            dispatch_async(dispatch_get_main_queue(), ^{
                [self popViewControllerAnimated:YES];//没有外部操作时,直接代码pop,这时
            });
        }
       
        return NO;
    }
    @end
     
  • 相关阅读:
    并查集N(The Suspects)
    (并查集)Ubiquitous Religions
    (并查集)How Many Tables
    并查集(畅通工程)
    约瑟夫环(栈和队列)
    队列-排队买饭
    栈的基本操作
    双向队列
    括号匹配
    Queue
  • 原文地址:https://www.cnblogs.com/sunjianfei/p/7808917.html
Copyright © 2011-2022 走看看