UITextView长按弹出UIMenuController,剪切拷贝选择全选粘贴删除
2016-11-11 22:42
337 查看
- (BOOL) canBecomeFirstResponder
{
return
YES;
}
- (BOOL) canPerformAction:(SEL)action withSender:(id)sender
{
if ( [UIMenuController
sharedMenuController] ) {
[UIMenuController
sharedMenuController].menuVisible =
NO;
}
return
YES;
}
如下:将会全部显示出来:
其中下边这些是可以访问的公开方法
现在有个需求如下图:添加一个"添加为模版"
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if(action ==@selector(copy:) ||
action ==@selector(selectAll:)||
action ==@selector(cut:)||
action ==@selector(select:)||
action ==@selector(paste:)) {
return[supercanPerformAction:actionwithSender:sender];//
}
returnNO;
}
在使用PHTTextView的controller中添加如下代码
UIMenuItem*menuItem = [[UIMenuItemalloc]initWithTitle:@"添加为模板"action:@selector(addToTemplate:)];
UIMenuController*menu = [UIMenuControllersharedMenuController];
[menusetMenuItems:[NSArrayarrayWithObjects:menuItem,nil]];
实现效果上图那样. 点击"全选"之后 全选按钮 就没有了
第三种代码
点击"全选"或者"选择"之后 才会出来 "添加为模板" 是因为 这句话 if(self.contentView.selectedRange.length>0) {returnYES;}else{returnNO;} 如果textview 又被选择的文字 才会 返回 yes 否则no
新建一个UITextField的子类,重写canPerformAction:withSender:方法并返回 NO 即可禁止粘贴:
2
3
4
5
6
或者禁止长按弹出UIMenuController菜单,但是这样做的话,想要复制UITextField内容的操作也一起被禁止了:
{
return
YES;
}
- (BOOL) canPerformAction:(SEL)action withSender:(id)sender
{
if ( [UIMenuController
sharedMenuController] ) {
[UIMenuController
sharedMenuController].menuVisible =
NO;
}
return
YES;
}
如下:将会全部显示出来:
其中下边这些是可以访问的公开方法
- (void)cut:(nullableid)senderNS_AVAILABLE_IOS(3_0);
- (void)copy:(nullableid)senderNS_AVAILABLE_IOS(3_0);
- (void)paste:(nullableid)senderNS_AVAILABLE_IOS(3_0);
- (void)select:(nullableid)senderNS_AVAILABLE_IOS(3_0);
- (void)selectAll:(nullableid)senderNS_AVAILABLE_IOS(3_0);
- (void)delete:(nullableid)senderNS_AVAILABLE_IOS(3_2);
- (void)makeTextWritingDirectionLeftToRight:(nullableid)senderNS_AVAILABLE_IOS(5_0);
- (void)makeTextWritingDirectionRightToLeft:(nullableid)senderNS_AVAILABLE_IOS(5_0);
现在有个需求如下图:添加一个"添加为模版"第一种代码
代码如下:自定义了一个PHTTextView 继承UITextView 中加入一下代码-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if(action ==@selector(copy:) ||
action ==@selector(selectAll:)||
action ==@selector(cut:)||
action ==@selector(select:)||
action ==@selector(paste:)) {
return[supercanPerformAction:actionwithSender:sender];//
}
returnNO;
}
在使用PHTTextView的controller中添加如下代码
UIMenuItem*menuItem = [[UIMenuItemalloc]initWithTitle:@"添加为模板"action:@selector(addToTemplate:)];
UIMenuController*menu = [UIMenuControllersharedMenuController];
[menusetMenuItems:[NSArrayarrayWithObjects:menuItem,nil]];
实现效果上图那样. 点击"全选"之后 全选按钮 就没有了
第三种代码
把 PHTTextView 中的 -(BOOL)canPerformAction:(SEL)action withSender:(id)sender方法改为第一种代码
让后在viewcontroller中添加了 如下 代码
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if(action ==@selector(addToTemplate:)) {//添加为模板方法
if(self.contentView.selectedRange.length>0) {
returnYES;
}else{
returnNO;
}
return[supercanPerformAction:actionwithSender:sender];
}
效果如下
点击"全选"或者"选择"之后 才会出来 "添加为模板" 是因为 这句话 if(self.contentView.selectedRange.length>0) {returnYES;}else{returnNO;} 如果textview 又被选择的文字 才会 返回 yes 否则no 新建一个UITextField的子类,重写canPerformAction:withSender:方法并返回 NO 即可禁止粘贴:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (action == @selector(paste:)) return NO; return [super canPerformAction:action withSender:sender]; }1
2
3
4
5
6
或者禁止长按弹出UIMenuController菜单,但是这样做的话,想要复制UITextField内容的操作也一起被禁止了:
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender { UIMenuController *menuController = [UIMenuController sharedMenuController]; if (menuController) { [UIMenuController sharedMenuController].menuVisible = NO; } return NO; }
相关文章推荐
- richTextBox的右键菜单“复制、粘贴、剪切、全选、删除、撤销、重做”
- 监听EditText的复制、粘贴、全选、剪切、选择等状态
- DataGrid中全选删除按钮,如果没选,先提示没有选择,再弹出确定删除对话框的例子
- 隐藏 UITextField 和 UITextView 中的菜单栏(剪切、拷贝、粘贴和替换等)
- UITextView中打开或禁用复制,剪切,选择,全选等功能
- GridView批量删除记录、全选及弹出确认对话框
- datagridview复制、剪切、粘贴、清空、增加行、删除行、增加列、删除列,导出Excel/Word
- vim中剪切多行,粘贴的方法,删除所有文本内容
- silverlight:向TextBox添加右键菜单,菜单包括复制、粘贴、剪切、选择全部等四项功能!
- iOS tableviewCell的多行选择删除和全选删除
- 如何与资源管理器互动剪切/拷贝/粘贴文件
- cp、rm、mv Linux下的文件拷贝、删除、剪切命令
- 对文本框进行限制,拷贝,粘贴,剪切
- ListView点击item底部弹出popupWindow删除、修改、取消选择框
- Android--解决EditText放到popupWindow中,原有复制、粘贴、全选、选择功能失效问题
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
- 解决mozilla和firefox不能剪切拷贝粘贴的问题
- iOS开发之TextField禁用粘贴、选择和全选功能
- 如何与资源管理器互动剪切/拷贝/粘贴文件
- vim删除剪切、复制、粘贴