国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS setOnclick點擊事件分析

2019-10-21 18:41:10
字體:
來源:轉載
供稿:網友

在Android中點擊事件是以setOnclick的形式進行設置的,用起來十分方便,而在ios中是以addTarget方式進行的,每次設置點擊事件都需要聲明一個新的方法,在大部分情況下顯得未免有些麻煩。而且通常來說我們使用的最多的是TouchUpInside方式的點擊事件,所以為了方便使用,我對UIButton/UIView的點擊事件進行了擴展。

使用

和之前一樣,我們先來看看擴展之后如何使用

oc版本

[_btn1 setOnclick:^{  NSLog(@"click btn1");}];

swift版本

btn.setOnClick {  print("click btn")}

用起來真的是非常簡單哈~

擴展過程

接下來我們就來看看,到底是如何擴展的呢?

oc版本

我們只需要為UIButton添加一個Category就可以使用了哦。

  #import <UIKit/UIKit.h>  @interface UIButton(click)  @property (nonatomic, strong) void (^clickBlock) (void);  - (void) setOnclick : (void (^)(void))block;  - (void) clickBtn : (UIButton*) sender;  - (void) setTarget : action:(SEL)action;  @end  
  #import "UIButton+click.h"  #import <objc/runtime.h>    @implementation UIButton(click)    static void *clickKey = &clickKey;  - (void)setClickBlock:(void (^)(void))clickBlock{    objc_setAssociatedObject(self, & clickKey, clickBlock, OBJC_ASSOCIATION_COPY);  }    - (void (^)(void))clickBlock{    return objc_getAssociatedObject(self, &clickKey);  }    -(void)setOnclick:(void (^)(void))block{    self.clickBlock = block;    [self addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];  }    - (void) clickBtn : (UIButton*) sender{    self.clickBlock();  }    @end

如果我們不希望每次都需要導入UIButton+click.h,只需要將UIButton+click.h添加到pch文件中就可以了哦。

swift版本

相對來說swift版本就比較麻煩一點,竟然不能直接擴展閉包類型的屬性,所以最后多創建了一個UIClick對象。

  class UIClick : Any{    var click : () -> Void = {return}  }    extension UIButton : Property{    var saveClick : UIClick{      get{        return get0()      }      set{        return set0(newValue)      }    }        func setOnClick(click : @escaping () -> Void) {      self.saveClick = UIClick()      self.saveClick.click = click      self.addTarget(self, action: #selector(btnClick), for: .touchUpInside)    }        @objc func btnClick(){      self.saveClick.click()    }  }

UIView onClick

看了以上的擴展過程,相信大家對UIView onClick的擴展心中也有數了,過程基本是一樣的,接下來只簡單寫一下不同的部分。

  func setOnClickView(click : @escaping () -> Void) {    self.isUserInteractionEnabled = true    self.saveClickView = UIClick()    self.saveClickView.click = click    let tap = UITapGestureRecognizer(target: self, action: #selector(btnClickView))    tap.numberOfTapsRequired = 1    self.addGestureRecognizer(tap)  }

oc的就略過了,原理是一樣的,代碼也是非常簡單。

總結

擴展并不復雜,但是確實還是帶來了不少方便,希望這種擴展思路能夠讓你眼前一亮,以上內容有任何錯誤歡迎指正。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 钟山县| 鲁甸县| 全南县| 醴陵市| 鹤岗市| 呼和浩特市| 通海县| 桂平市| 金平| 乌审旗| 永仁县| 旅游| 西宁市| 曲周县| 南和县| 米泉市| 连云港市| 阳谷县| 锡林郭勒盟| 石嘴山市| 屏东市| 四会市| 铁岭县| 宜宾市| 海盐县| 郑州市| 浦北县| 西平县| 南充市| 宜良县| 丰原市| 博乐市| 乡城县| 大余县| 高碑店市| 视频| 吉安县| 湖北省| 龙海市| 双流县| 蒲城县|