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)。
网友评论