如何使用UIMenuController iOS5.1防止在UITextView上复制/粘贴/选择弹出窗口

时间:2014-07-01 15:30:59

标签: ios objective-c uitextfield xcode5.1 uimenucontroller

问题:如何阻止出现在 UITextView 上的复制/粘贴/选择弹出窗口(不使用 UIwebView 和css)?

由于我已经使用 UIViews UITextFields 进行数据输入,因此我不想去 UIWebView 。我曾尝试使用以下方法 targetForAction:withSender setMenuVisible:动画,最后是 canPerformAction:withSender 。 (它没有工作 - [悲伤的脸])

2 个答案:

答案 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,如下图所示:

Custom Class:TPTextfield

我可以通过git轻松访问here。如果这对您有帮助,请告诉我们!

答案 1 :(得分:0)

如果将UITextView创建为故事板上的对象,则解决方案更加容易。在UITextView对象的Attributes Inspector中,在Behavior下,取消选中Editable并取消选中Selectable。在“滚动视图”部分下,如果希望用户能够滚动文本,则可以选中“滚动已启用”。