iOS笔记

UITextView禁用复制黏贴

2020-07-01  本文已影响0人  狗蛋的春天

1、新建UITextView的分类

利用runtime添加属性,BOOL类型的必须转换为对象形式的NSNumber,才能添加(像NSSstring,UIColor,UIFontd等对象),也可以直接添加NSNumber类型,用的时候外面直接用@(数字)。

UITextView+xxx.h 里面

  @property(nonatomic,   assign) BOOL canCopyPaste

UITextView+xxx.m里面

  //把bool添加到分类中 用nsnumber包装下
  - (void)setCanCopyPaste:(BOOL)canCopyPaste{
        objc_setAssociatedObject(self, &CanCopyPaste, @(canCopyPaste),OBJC_ASSOCIATION_ASSIGN);
    }
  - (BOOL)canCopyPaste{
        return objc_getAssociatedObject(self, &CanCopyPaste);
    }
   //判断  能不能复制黏贴  重写返回
  - (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
        if (self.canCopyPaste) {
              return YES;
         }
        UIMenuController *menuController = [UIMenuController sharedMenuController];
        if (menuController) {
                [UIMenuController sharedMenuController].menuVisible = NO;
          }
      return NO;
    }

使用

    _textView.canCopyPaste = NO;//为NO时 禁用复制黏贴

2、简单函数介绍

   objc_setAssociatedObject 相当于 setValue:forKey 进行关联value对象
   objc_getAssociatedObject 用来读取对象
   objc_AssociationPolicy  属性 是设定该value在object内的属性,即 assgin,(retain,nonatomic)...等
   objc_removeAssociatedObjects 函数来移除一个关联对象,或者使用objc_setAssociatedObject函数将key指定的关联对象设置为nil

参数

    key:要保证全局唯一,key与关联的对象是一一对应关系。必须全局唯一。通常用@selector(methodName)作为key。
    value:要关联的对象。
    policy:关联策略。有五种关联策略。
    OBJC_ASSOCIATION_ASSIGN 等价于 @property(assign)。
    OBJC_ASSOCIATION_RETAIN_NONATOMIC等价于 @property(strong, nonatomic)。
    OBJC_ASSOCIATION_COPY_NONATOMIC等价于@property(copy, nonatomic)。
    OBJC_ASSOCIATION_RETAIN等价于@property(strong,atomic)。
    OBJC_ASSOCIATION_COPY等价于@property(copy, atomic)。
上一篇 下一篇

猜你喜欢

热点阅读