美文网首页
监听tabBarButton这个私有类的点击方法

监听tabBarButton这个私有类的点击方法

作者: 小苗晓雪 | 来源:发表于2017-04-05 14:50 被阅读9次

双击tabBarButton时候会用到 UIControlEventTouchDownRepeat 这个按钮点击模式 !!!

#import "BaseTabBar.h"

@interface BaseTabBar ()
@property (nonatomic , weak) UIButton *publishButton ;
//上一次点击的按钮:
@property (nonatomic , strong) UIControl *previousClickTabBarButton ;

@end

@implementation BaseTabBar

#pragma mark - lazyLoad
- (UIButton *)publishButton {
    if (!_publishButton) {
        UIButton *publishButton = [UIButton buttonWithType:UIButtonTypeCustom] ;
        [publishButton setBackgroundImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal] ;
        [publishButton setBackgroundImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted] ;
        [publishButton sizeToFit] ;
        _publishButton = publishButton ;
        [self addSubview:_publishButton] ;
    }
    return _publishButton ;
}

#pragma mark - layoutSubviews
- (void)layoutSubviews {
    [super layoutSubviews] ;
    NSInteger count = self.items.count + 1 ;
    CGFloat buttonW = self.width / count ;
    CGFloat buttonH = self.height ;
    CGFloat buttonY = 0 ;
    CGFloat buttonX = 0 ;
    NSInteger i = 0 ;
    for (UIControl *tabBarButton in self.subviews) {
        //遍历私有属性:UITabBarButton只能用 NSClassFromString 方法:
        if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            //一进入程序就让精华按钮处于被点击一次的状态:
            //layoutSubviews会被调用多次 , 如果只是i == 0 判断不够严谨 ;
            if (i == 0 && self.previousClickTabBarButton == nil) {
                self.previousClickTabBarButton = tabBarButton ;
            }
            
            if (i == 2) i += 1 ;
            buttonX = i * buttonW ;
            //系统的UITabBarButton的高度就是48 , 所以我这里也修改一下
            tabBarButton.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH - buttonY) ;
            i++ ;
            
            //监听点击:
            //因为 UITabBarButton 是UITabBar的私有类 , 不能遍历特定该属性 ;如果还是UIView就不能addTarget:方法 ;所以找到 tabBarButton.superclass 继承自UIControl ;
            [tabBarButton addTarget:self action:@selector(tabBarButtonAction:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchDownRepeat] ;
            
        }
    }
    self.publishButton.center = CGPointMake(self.width * 0.5, self.height * 0.5) ;
    NSLog(@"%@" , self.subviews) ;
    
}

- (void)tabBarButtonAction:(UIControl *)tabBarButton {
    //判断为重复点击上一次的按钮:
    if (self.previousClickTabBarButton == tabBarButton) {
        DebugLog ;
    }
    //把上一次点击的按钮存起来:
    self.previousClickTabBarButton = tabBarButton ;
    
}

@end

愿编程让这个世界更美好

相关文章

  • 监听tabBarButton这个私有类的点击方法

    双击tabBarButton时候会用到 UIControlEventTouchDownRepeat 这个按钮点击模...

  • Swift的几个新特性

    方法默认为私有时,对一个对象监听,不能对这个方法进行调用 closeBtn.addTarget(self, a...

  • button点击事件

    在android开发中,监听button的点击事件有四种方法。 1:使用匿名内部类: 2:自定义单击事件监听类(继...

  • 公有、私有、静态属性和方法的区别2018-07-10

    //私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用...

  • iOS底层应用

    1、调用私有方法 已创建一个FirstObj 类,其中有一个方法 如何调用这个私有方法? 持续更新……

  • python中OOP的类属性和方法与多态

    目录 类的结构 类属性和实例属性 类方法和静态方法 多态 私有属性和私有方法 01. 类的结构 1.1 术语 ——...

  • 再次理解回调的含义

    哪个类实现了回调监听接口中的方法,就回去调用哪个类中的对应的方法。 入口main函数 点击run : 延时一秒后打...

  • Javaweb组件--Listener

    监听器就是实现特定接口的Java类,这个类专门用于监听另一个Java对象的方法调用或者属性改变,当监听对象发生上述...

  • 网络状态的监听

    网络状态改变的监听方法 通过苹果苹果提供的Reachability类来实现监听注意 : 这个类通常情况下,要想实现...

  • 类的私有方法和属性

    类的私有方法和属性: 1.类的私有属性 在声明 类属性的时候前面加上 双下划线,那么这个属性被定义为 私有的,受保...

网友评论

      本文标题:监听tabBarButton这个私有类的点击方法

      本文链接:https://www.haomeiwen.com/subject/gjztattx.html