1改淑、項目需求:
一個cell上的UITextView碍岔。多行顯示,有屬性字符串朵夏,可以點擊鏈接跳轉(zhuǎn)蔼啦。但需要禁止文本選擇和禁用系統(tǒng)自帶的復(fù)制、粘貼等功能仰猖。
2捏肢、思路分析以及網(wǎng)上已有案例
1、方案一:
UITextView禁用復(fù)制粘貼放大
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
return NO;
}
這種方法雖可以實現(xiàn)禁用復(fù)制饥侵。但是鸵赫,點擊鏈接無法跳轉(zhuǎn)。
2躏升、方案二:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
// if (action == @selector(paste:))//禁止粘貼
// return NO;
// if (action == @selector(select:))// 禁止選擇
// return NO;
// if (action == @selector(selectAll:))// 禁止全選
// return NO;
// return [super canPerformAction:action withSender:sender];
UIMenuController *menuController = [UIMenuController sharedMenuController];
if (menuController)
{
[UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}
重寫UITextView的這個方法基本辩棒,就可以截取選擇文本的動作。
但是依然有可能,出現(xiàn)復(fù)制的提示框一睁。(我找了很久沒有找到钻弄。所以有了下面的方案。)
3者吁、我的方案:
示例代碼
#import "UITextView+DisableCopy.h"
@implementation UITextView (DisableCopy)
/**
* 創(chuàng)建UITextField 的catgory 窘俺,將此方法粘貼到.m文件。
* 也就是重寫長按方法 ,將長按的菜單關(guān)閉掉.
* @return 在需要使用的類直接引入.h文件即可 無需調(diào)用
*/
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
//一旦雙擊砚偶,里面禁用批销。取消第一響應(yīng)者洒闸,設(shè)置不可交互染坯。
[self resignFirstResponder];
self.userInteractionEnabled = NO;
if ([UIMenuController sharedMenuController])
{
[UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}
@end
建議
[self resignFirstResponder];
self.userInteractionEnabled = NO;
小心使用。不然丘逸,可能影響事件的傳遞单鹿。