繁体   English   中英

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

[英]How do Prevent a copy/paste/select popover on a UITextView using UIMenuController iOS5.1

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

我不希望UIWebView泛滥成灾,因为一些帖子已经消失了,因为我已经将UIViewsUITextFields一起用于数据输入。 我尝试使用以下方法在我的视图控制器的实现文件中实现与UITextField有关的解决方案失败 ,方法是: targetForAction:withSendersetMenuVisible:animated以及最后canPerformAction:withSender (这不可行-[悲伤的表情])

好的,我找到了一个可行的解决方案 (在Xcode 5.1中 ),简而言之,它是UITextField的子类。

我意识到我并没有像我想要的那样真正覆盖视图控制器中UITextField的默认行为,也没有将此处列出的方法覆盖视图控制器文件中文本字段委托的行为。 关键是使用-targetForAction:withSender子类化UITextField本身。 (我知道你们都在屏幕尖叫多么明显 ,这是!)这不是明显对我。 像大多数问题一样,当我首先找出它们时,我经历了很多不同的途径,我在这里找到了一些途径。 但是解决方案很简单。 我想在自己的领域中分享此解决方案,以便希望它可以对某人有所帮助。

头文件:

//
//

#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

在您的情节提要或nib / xib文件中,只需将此类连接到UITextfield即可,如下图所示:

自定义类别:TPTextfield

我在git上有它,以便在这里轻松访问。 如果这对您有帮助,请告诉我!

托尼

如果将UITextView创建为情节提要上的对象,则解决方案将更加容易。 在UITextView对象的“属性检查器”中,在“行为”下,取消选中“可编辑”并取消选中“可选”。 在“滚动视图”部分下,如果希望用户能够滚动文本,则可以选中“启用滚动”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM