UIButton获取点击的坐标及高级操作

需求:对于一个按钮,存在4中状态:无响应状态;正常相应状态,默认状态;递增状态;递减状态。

按钮的4种状态

// 设置按钮处于那种状态,右上角显示什么图片、是否能点击
typedef NS_ENUM(NSInteger, TKHomeMenuBeanButtonClickType) {
    TKHomeMenuBeanButtonClickTypeCheck = -1,    // 显示对勾, 点击没反应
    TKHomeMenuBeanButtonClickTypeDefault = 0,   // 默认状态、无右上角图片
    TKHomeMenuBeanButtonClickTypeAdd = 1,       // 显示加号,
    TKHomeMenuBeanButtonClickTypeReduce = 2     // 显示减号
};
// 或者
typedef enum {
    TKHomeMenuBeanButtonClickTypeCheck = -1,    // 显示对勾, 点击没反应
    TKHomeMenuBeanButtonClickTypeDefault = 0,   // 默认状态、无右上角图片
    TKHomeMenuBeanButtonClickTypeAdd = 1,       // 显示加号,
    TKHomeMenuBeanButtonClickTypeReduce = 2     // 显示减号
} TKHomeMenuBeanButtonClickType;
...
 //专业解释:按钮绑定点击事件
[_menuButton addTarget:self action:@selector(menuButtonClick:event:) forControlEvents:UIControlEventTouchUpInside];
...

// 按钮添加target,即能传来了UIButton,也能传来**事件**
- (void)menuButtonClick:(TKHomeMenuButton *)sender event:(UIEvent *)event {
    
    if (sender.clickType==TKHomeMenuBeanButtonClickTypeCheck) {
    // 处于非响应状态
        return;
    }
    
    if (sender.clickType>=1) { // 添加、删除
      
       // 根据事件定位到点击位置
        UITouch *touch = [[event touchesForView:sender] anyObject];
        CGPoint point = [touch locationInView:sender];
        
        if (point.x<sender.bounds.size.width/3*2 || point.y>sender.bounds.size.height/3*2) { // 点击位置不符合条件
            return;
        }
    }
    //相应各种点击
    if (_buttonClickBlock) { 
        _buttonClickBlock(self);
    }
}

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 7,376评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,062评论 16 134
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 157,643评论 24 688
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 2,874评论 0 10
  • 家里曾经前后养过两只猫。 准确的说,是母子两只猫。 记得那是深秋的一天,晚上,父亲回到家的时候,笑眯眯的变出了一只...
    七点七分田阅读 115评论 0 0