问题:如何阻止出现在 UITextView 上的复制/粘贴/选择弹出窗口(不使用 UIwebView 和css)?
由于我已经使用 UIViews 与 UITextFields 进行数据输入,因此我不想去 UIWebView 。我曾尝试使用以下方法 targetForAction:withSender , setMenuVisible:动画,最后是 canPerformAction:withSender 。 (它没有工作 - [悲伤的脸])
答案 0 :(得分:0)
好的,我在我的问题中找到了工作解决方案(在 Xcode 5.1 中),简而言之,它是 UITextField 的子类。< / p>
我意识到我并没有像我想的那样覆盖视图控制器中 UITextField 的默认行为,而且这里列出的方法都没有覆盖视图中textfield委托的行为控制器文件。 键是使用 -targetForAction:withSender 将 UITextField 子类化为子类。 (我知道你们当中有些人在屏幕上尖叫着关于 OBVIOUS 是怎么回事!)对我来说 是显而易见的。像大多数问题一样,当我第一次搞清楚时,我经历了很多不同的路径,我在这里找到了一些。但解决方案很简单。我想在自己的领域分享这个解决方案,所以希望它可以帮助别人。
标题文件:
//
//
#import <UIKit/UIKit.h>
@interface TPTextField : UITextField
- (id)targetForAction:(SEL)action withSender:(id)sender;
@end
和实施文件(.m)
//
//
#import "TPTextField.h"
@implementation TPTextField
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
#pragma mark - method overrides - deny user copy/paste on UITTextFields
- (id)targetForAction:(SEL)action withSender:(id)sender
{
UIMenuController *menuController = [UIMenuController sharedMenuController];
if (action == @selector(selectAll:) || action == @selector(paste:) ||action == @selector(copy:) || action == @selector(cut:)) {
if (menuController) {
[UIMenuController sharedMenuController].menuVisible = NO;
}
return nil;
}
return [super targetForAction:action withSender:sender];
}
@end
在您的storyboard或nib / xib文件中,只需将此类连接到您的UITextfield,如下图所示:
我可以通过git轻松访问here。如果这对您有帮助,请告诉我们!
贝
答案 1 :(得分:0)
如果将UITextView创建为故事板上的对象,则解决方案更加容易。在UITextView对象的Attributes Inspector中,在Behavior下,取消选中Editable并取消选中Selectable。在“滚动视图”部分下,如果希望用户能够滚动文本,则可以选中“滚动已启用”。