11 ios 自定义返回按钮_ios 11自定义返回按钮 - CSDN
  • @interface ViewController ()  @end@implementation ViewController  - (void)viewDidLoad {   [super viewDidLoad]; // 自定义返回按钮   UIButton *button = [[UIButton alloc]initWi
    1. @interface ViewController ()   

    2. @end@implementation ViewController  
    3. - (void)viewDidLoad {  
    4.         [super viewDidLoad];        // 自定义返回按钮  
    5.         UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];  
    6.         self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];  
    7. }  
    8.   
    9. - (void)back:(UIButton *)button {  
    10.         [self.navigationController popViewControllerAnimated:YES];  
    11. }  
    12.   
    13. - (void)viewWillAppear:(BOOL)animated {  
    14.     [super viewWillAppear:animated];    
    15.  if (self.navigationController.viewControllers.count > 1) {          
    16.   // 记录系统返回手势的代理  
    17.         _delegate = self.navigationController.interactivePopGestureRecognizer.delegate;          
    18.   // 设置系统返回手势的代理为当前控制器  
    19.         self.navigationController.interactivePopGestureRecognizer.delegate = self;  
    20.     }  
    21. }  
    22.   
    23. - (void)viewWillDisappear:(BOOL)animated {  
    24.     [super viewWillDisappear:animated];     
    25.  // 设置系统返回手势的代理为我们刚进入控制器的时候记录的系统的返回手势代理  
    26.     self.navigationController.interactivePopGestureRecognizer.delegate = _delegate;  
    27. }
    28. #pragma mark - UIGestureRecognizerDelegate
    29. - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {        
    30.  return self.navigationController.childViewControllers.count > 1;  
    31. }  
    32.   
    33. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {    
    34. return self.navigationController.viewControllers.count > 1;  
    35. }

    36. @end  




    展开全文
  • 原文地址 参考1:关于backBarButtonItem的N种方法 ...项目中经常需要自定义导航栏返回按钮,只显示文字或者图片 分析 自定义导航栏返回按钮的思路很多: 每个子视图控制器中修改 leftB

    原文地址
    参考1:关于backBarButtonItem的N种方法
    参考2:How to make custom UINavigationController back button image without title

    需求

    项目中经常需要自定义导航栏返回按钮,只显示文字或者图片

    只显示文字

    只显示图片

    分析

    自定义导航栏返回按钮的思路很多:

    1. 每个子视图控制器中修改 leftBarButtonItem 的样式,缺点是重复工作量大,如有变更不易修改。
    2. 基类中通过实现 UINavigationController 的代理判断是否是栈底,如果不是栈底,则修改 leftBarButtonItem 的样式。
    3. 在基类中设置backBarButtonItem,易于修改,工作量小。
    4. Method Swizzling:将系统自带的backBarButtonItem方法替换成我们自定义的方法。

    实现

    方法2:

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        UIViewController *root = navigationController.viewControllers[0];
    
        if (root != viewController) {
            UIBarButtonItem *itemleft = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backBtn"] style:UIBarButtonItemStylePlain target:self action:@selector(popAction:)];
            viewController.navigationItem.leftBarButtonItem = itemleft;
        }
    }
    
    
    - (void)popAction:(UIBarButtonItem *)barButtonItem
    {
        [self.navigationController popViewControllerAnimated:YES];
    }

    方法3:

         //只显示文字
        //self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
    
        //只显示图片
        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"nav_back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:nil action:nil];
    
        //更改返回按钮填充颜色
       //self.navigationController.navigationBar.tintColor = [UIColor darkGrayColor];
    
        //隐藏默认的返回箭头
        self.navigationController.navigationBar.backIndicatorImage = [UIImage new];
        self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage new];

    方法4:

    +(void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            Method originalMethodImp = class_getInstanceMethod(self, @selector(backBarButtonItem));
            Method destMethodImp = class_getInstanceMethod(self, @selector(myCustomBackButton));
            method_exchangeImplementations(originalMethodImp, destMethodImp);
        });
    }
    
    static char kCustomBackButtonKey;
    
    -(UIBarButtonItem *)myCustomBackButton{
        UIBarButtonItem *item = [self myCustomBackButton];
        if (item) {
            return item;
        }
        item = objc_getAssociatedObject(self, &kCustomBackButtonKey);
        if (!item) {
            item = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:NULL];
            objc_setAssociatedObject(self, &kCustomBackButtonKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        }
        return item;
    }
    
    - (void)dealloc
    {
        objc_removeAssociatedObjects(self);
    }
    展开全文
  • 其实很简单很简单,只需要添加下面这一句代码即可: self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
    其实很简单很简单,只需要添加下面这一句代码即可:
    self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
    展开全文
  • 在viewDidLoad方法中直接写如下一段代码: self.navigationController.interactivePopGestureRecognizer.delegate = self;

    在viewDidLoad方法中直接写如下一段代码:

    self.navigationController.interactivePopGestureRecognizer.delegate = self;

    展开全文
  • 此方法可以自定义返回按钮,且不影响返回手势。 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:nil]; self....

     此方法可以自定义返回按钮,且不影响返回手势。

    新方法:

     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
                                             initWithImage:img
                                             style:UIBarButtonItemStylePlain
                                             target:self
                                             action:@selector(onBack:)];
    self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;



    老方法:

        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:nil];
        self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;
    




    展开全文
  • 主要代码如下: ...//自定义导航栏返回按钮 self.navigationItem.leftBarButtonItem = ({ //导航栏返回背景视图 UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 160, 44)]; ...
  • //自定义返回按钮 (全局设置)  UIImage *backButtonImage = [[UIImage imageNamed:@"back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)];  [[UIBarButtonItem appearance] ...
  • 自定义返回按钮后右滑返回会失效 //返回按钮 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"return"] style:(UIBarButtonItemStylePlain) target:...
  • 当我们使用自定义button进行popViewController,并将系统NavigationBar隐藏时, (self.navigationController.navigationBarHidden = YES;) NavigationBar的系统自带的侧滑手势便不存在了。 当然我们可以在当期...
  • iOS 自定义navigationBar 的返回按钮,在开发的时候,系统...基本能明白:要自定义返回按钮的返回图片,就必须同时实现红色框内的两个方法代码: // 导航栏返回按钮 图片 [UINavigationBar appearance].backIndicat
  • 简单、优雅地解决 iOS 11 导航栏自定义按钮布局和触摸事件响应的问题
  • //自定义返回按钮 (全局设置)  UIImage *backButtonImage = [[UIImage imageNamed:@"back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)];  [[UIBarButtonItem appearance] ...
  • http://blog.sina.com.cn/s/blog_9592635a0101fuk9.html -(void)viewWillAppear:(BOOL)animated{ ... [super viewWillAppear:animated];... //开启ios右滑返回  if ([self.navigationController respondsT
  • 导航栏返回按钮自定义
  • ios 自定义返回按钮时,如何添加手势返回
  • 在viewDidLoad方法里面添加下面这一句代码即可 self.navigationController.interactivePopGestureRecognizer.delegate=(id)self; 转载于:https://www.cnblogs.com/gaoxiaoniu/p/5292564.html...
  • 我们都知道,在iOS7中,系统添加了左滑返回事件,默认情况时开启的,但是一旦自定义返回按钮,系统的左滑事件就会失灵。 解决方案: 首先在几个一级页面的ViewController里面设置UIGestureRecog
  • .重写系统的push方法,实现全局返回按钮的功能. .将原来保存的代理属性,赋值给系统,让系统代理保持原来的工作(支持侧滑)
  • iOS 11中,系统重构了导航栏,UINavigationBar的层次结构发生了变化,同时影响了按钮UINavigationItem的布局位置以及响应区域。而针对于不同的系统,我们很多时候可能都需要做导航栏按钮的响应区域的优化。 本文会...
  • iOS 自定义返回按钮,保留系统滑动返回 - (void)viewDidLoad {  [super viewDidLoad]; // 自定义返回按钮  UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];  [button ...
1 2 3 4 5 ... 20
收藏数 22,615
精华内容 9,046
关键字:

11 ios 自定义返回按钮