为了账号安全,请及时绑定邮箱和手机立即绑定

如何以编程方式从UITextField禁用复制粘贴选项

/ 猿问

如何以编程方式从UITextField禁用复制粘贴选项

犯罪嫌疑人X 2019-11-14 14:15:28

我正在制作一个具有UITextField的注册Alertview,用户可以在其中输入其注册号。一切都差不多,但是我想以编程方式从文本字段中删除复制粘贴功能,因为它们不是文本字段的InterfaceBuilder版本,所以我不知道该怎么做。


到目前为止是我的UIalertview ...


- (void)pleaseRegisterDevice {


    UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Please Register Device!" message:@"this gets covered" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];

    regTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];

    [regTextField setBackgroundColor:[UIColor whiteColor]];

    regTextField.textAlignment = UITextAlignmentCenter;

    [myAlertView addSubview:regTextField];

    [myAlertView show];

    [myAlertView release];


}


查看完整描述

3 回答

?
MMMHUHU

这篇文章有很多不错的解决方案:如何在UITextView中禁用复制,剪切,选择,全选


我最喜欢的是重写canPerformAction:withSender::


- (BOOL)canPerformAction:(SEL)action withSender:(id)sender

{

    if (action == @selector(paste:))

        return NO;

    return [super canPerformAction:action withSender:sender];

}


查看完整回答
反对 回复 2019-11-14
?
慕神8447489

只要您可以使用子类化,情节提要板的用户可能希望查看此解决方案。


我认为没有通过扩展或协议实现此目标的简便方法。


斯威夫特3.1

import UIKit


@IBDesignable

class CustomTextField: UITextField {


    @IBInspectable var isPasteEnabled: Bool = true


    @IBInspectable var isSelectEnabled: Bool = true


    @IBInspectable var isSelectAllEnabled: Bool = true


    @IBInspectable var isCopyEnabled: Bool = true


    @IBInspectable var isCutEnabled: Bool = true


    @IBInspectable var isDeleteEnabled: Bool = true


    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {

        switch action {

        case #selector(UIResponderStandardEditActions.paste(_:)) where !isPasteEnabled,

             #selector(UIResponderStandardEditActions.select(_:)) where !isSelectEnabled,

             #selector(UIResponderStandardEditActions.selectAll(_:)) where !isSelectAllEnabled,

             #selector(UIResponderStandardEditActions.copy(_:)) where !isCopyEnabled,

             #selector(UIResponderStandardEditActions.cut(_:)) where !isCutEnabled,

             #selector(UIResponderStandardEditActions.delete(_:)) where !isDeleteEnabled:

            return false

        default:

            //return true : this is not correct

            return super.canPerformAction(action, withSender: sender)

        }

    }

}


查看完整回答
反对 回复 2019-11-14
?
偶然的你

对于iOS8.0 +,Xcode 6.0.1,ARC已启用


希望保存像我这样的初学者,花一些时间实现这个目标...


实现禁用复制/粘贴/剪切/等。您必须继承UITextField并重写...


- (BOOL)canPerformAction:(SEL)action withSender:(id)sender

去做这个...


创建一个新类,它是UITextField的子类(即,要包含在您的应用文件夹中的新.h和.m文件)。因此,File-> New->“ Cocoa Touch Class”-> Next->“ PasteOnlyUITextField”(例如)是“ UITextField”-> Next-> Create的子类。


为我们的新的UITextField子类“ .PasteOnlyUITextField”创建.h和.m文件后,...


PasteOnlyUITextField.h


#import <UIKit/UIKit.h>


@interface PasteOnlyUITextField : UITextField


@end

PasteOnlyUITextField.m


#import "PasteOnlyUITextField.h"


@implementation PasteOnlyUITextField


/*

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

}

*/


- (BOOL)canPerformAction:(SEL)action withSender:(id)sender

{

    if (action == @selector(paste:))

    {

        return true;

    }


    return false;

}


@end

现在确保在要使用它的位置导入PasteOnlyUITextField.h,例如YourUIViewController.h文件...


#import "PasteOnlyUITextField.h"

现在,您必须通过编程方式或通过身份检查器使用子类


PasteOnlyUITextField *pasteOnlyUITextField = [[PasteOnlyUITextField alloc] init...];

要么...


选择UITextField并转到身份检查器,选择其类。


您可以根据需要更改与菜单选项关联的逻辑...


希望这可以帮助!感谢所有原始贡献者。


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信