iOS UITExtField에서 복사 및 붙여넣기 금지

3205 단어
UItextField 에는 다음과 같은 방법이 있습니다.
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender

  는 입력란에 대한 사용자의 동작을 제어할 수 있습니다.
cut: //   
copy: //   
select: //   
selectAll: //   
paste: //   
delete: //   
_promptForReplace: // Replace...
_transliterateChinese: //  <=> 
_showTextStyleOptions: // B/U
_define: // Define
_addShortcut: // Learn...
_accessibilitySpeak: // Speak
_accessibilitySpeakLanguageSelection: // Speak...
_accessibilityPauseSpeaking: // Pause
_share: //   ...
makeTextWritingDirectionRightToLeft: //     
makeTextWritingDirectionLeftToRight: //     

많은 조작이 기본적으로 개방되어 있음을 알 수 있다.외워 쓰기를 사용하지 않으려면 전체적으로 사용하지 않기를 권장하거나, 어떤 조작을 필요로 하는지, 이 조작을 사용하지 않으려면, 다른 것은 모두 금지됩니다.
코드는 다음과 같습니다.
//      (  、  、        )
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{

    UIMenuController *menuController = [UIMenuController sharedMenuController];
    if (menuController) {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
}
//            -                  
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    //            、       
    if (action == @selector(paste:))
        return YES;
    return NO;
}

주의: UITExtField의 분류를 써서 canPerformAction 방법을 다시 쓰고 입력 상자에 필요한 동작에 대한 권한을 열어야 합니다.
demo 코드는 다음과 같습니다.
#import "UITextField+SET.h"

@implementation UITextField (SET)

//            -                  
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    
    if (self.tag == 100) {
        //            、       
        if (action == @selector(paste:))
            return YES;
    }else if (self.tag == 101){
        //          、  、    、       
        if (action == @selector(copy:) || action == @selector(select:) || action == @selector(selectAll:))
            return YES;
    }
    
    return NO;
}


@end
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UITextField *pasteField;

@property (nonatomic, strong) UITextField *noneField;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.pasteField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 200, 30)];
    self.pasteField.layer.borderWidth = 0.5f;
    self.pasteField.layer.borderColor = [UIColor blackColor].CGColor;
    self.pasteField.placeholder = @"     ";
    self.pasteField.delegate = self;
    self.pasteField.tag = 100;
    [self.view addSubview:self.pasteField];
    
    self.noneField = [[UITextField alloc] initWithFrame:CGRectMake(20, 200, 200, 30)];
    self.noneField.layer.borderWidth = 0.5f;
    self.noneField.layer.borderColor = [UIColor blackColor].CGColor;
    self.noneField.placeholder = @"     、  、  ";
    self.noneField.delegate = self;
    self.noneField.tag = 101;
    [self.view addSubview:self.noneField];
}

@end


demo git 주소:https://github.com/ITHanYong/UITextField-banCopyPaste.git

좋은 웹페이지 즐겨찾기