项目经验iOS学习专题iOS 开发

iOS统计整个App 每个按钮的点击次数

2015-10-16  本文已影响5856人  猫爪

<code>GitHub上的Demo,是最新的代码</code>ClickCountOfButton

在开发的时候需要一个问题,在产品已经完成后,产品经理来了一句

今天上架,顺道统计整个App 每个按钮的点击次数,进行数据分析 

东西都做完了,还整这个,项目原因<code>不能使用友盟</code>,但是作为一个技术宅,如果做不出来,那不是也太逊了吗,于是对需求进行了分析

使用分类重写UIButton的方法

    /** 拦截了UIButton 所有的  
     - (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 
    方法*/
    - (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents{  
 
     //block循环引用
     __weak typeof(target) weakTarget = target;

    //利用 关联对象 给UIButton 增加了一个 block 
     [self  setCurrentActionBlock:^{ 
        //运行时 发送 消息 执行方法
         ((void (*)(void *, SEL, UIView *))objc_msgSend)((__bridge void *)(weakTarget), action , nil); 
     }]; 
        //拦截了本身要执行的action 先执行,写下来的 xw_clicked:方法       
        [super addTarget:self action:@selector(xw_clicked:) forControlEvents:controlEvents];
    }

    //拦截了按钮点击后要执行的代码
    - (void)xw_clicked:(UIButton *)sender{  
      //统计 
      self.btnClickedCount++; 
      NSLog(@"%@ 点击 %ld次 ",[sender titleForState:UIControlStateNormal], self.btnClickedCount);  
      //执行原来要执行的方法 
      sender.currentActionBlock();
    }
      //在分类中增加了 btnClickedCount的 (setter 和 getter)方法,使用关联对象增加了相关的成员空间
    - (NSInteger)btnClickedCount{  
        id tmp = objc_getAssociatedObject(self, &xw_btnClickedCount); 
        NSNumber *number = tmp; 
        return number.integerValue;
    }

    - (void)setBtnClickedCount:(NSInteger)btnClickedCount{ 
        objc_setAssociatedObject(self, &xw_btnClickedCount, @(btnClickedCount), OBJC_ASSOCIATION_ASSIGN);
    }

测试代码

     - (void)viewDidLoad { 
        [super viewDidLoad];  
        //添加两个按钮到View上面 
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd]; 
        btn.frame = (CGRect){100,200,50,50}; 
        [btn addTarget:self action:@selector(btn1Clicked:) forControlEvents:UIControlEventTouchUpInside]; 
        [btn setTitle:@"添加A" forState:UIControlStateNormal]; [self.view addSubview:btn];   
        UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeContactAdd]; 
        btn2.frame = (CGRect){200,200,50,50}; 
        [btn2 addTarget:self action:@selector(btn2Clicked:) forControlEvents:UIControlEventTouchUpInside]; 
        [btn2 setTitle:@"添加B" forState:UIControlStateNormal]; 
        [self.view addSubview:btn2];
     }
    #pragma mark - 按钮点击事件
    - (void)btn1Clicked:(UIButton *)btn{ 
        NSLog(@"btn1");  
     }
    - (void)btn2Clicked:(UIButton *)btn{ 
        NSLog(@"btn2");
    }
        ```
####效果![这里写图片描述](http:https://img.haomeiwen.com/i624018/561592e95be52b3a?imageMogr2/auto-orient/strip)

Demo下载地址:https://github.com/boyXiong/ClickCountOfButton
个人微信:wrdxxs
个人开源:https://github.com/boyXiong/XWSwiftRefresh
关注我,就会不断推出新文章
上一篇下一篇

猜你喜欢

热点阅读