Cách tắt Sao chép, Cắt, Chọn, Chọn tất cả trong UITextView


110

Chức UITextViewnăng Sao chép, Cắt, Chọn, Chọn Tất cả được hiển thị theo mặc định khi tôi nhấn xuống trên màn hình. Nhưng, trong dự án của tôi UITextFieldlà chỉ đọc. Tôi không yêu cầu chức năng này. Vui lòng cho tôi biết cách tắt tính năng này.


3
nơi [UIMenuController sharedMenuController] .menuVosystem = NO; trong - (BOOL) canPerformAction: (SEL) hành động với phương thức người gửiSender: (id).
ravoorinandan

Câu trả lời:


108

Cách dễ nhất để vô hiệu hóa các hoạt động của bảng dán là tạo một lớp con của lớp UITextViewđó ghi đè canPerformAction:withSender:phương thức để trả về NOcác hành động mà bạn không muốn cho phép:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(paste:))
        return NO;
    return [super canPerformAction:action withSender:sender];
}

Cũng xem UIResponder


1
@rpetrichm, Tôi đã sử dụng bạn giải pháp, sao chép / dán / cắt / chọn / chọn Tất cả các tùy chọn đều bị vô hiệu hóa nhưng vẫn có Thay thế ... | BIU | Xác định tùy chọn. Tôi muốn tắt menu hoàn chỉnh đó.
Ameet Dhas

3
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }- để chặn tất cả các tùy chọn
Islam Q.

Điều đó thật tuyệt, tuy nhiên tôi không biết cách thực hiện điều này đối với UISearchBar - vì cũng có một trường văn bản bên trong, tôi nghĩ rằng tôi có thể ghi đè phương thức của lớp con của UISearchBar nhưng điều đó không hoạt động. Bất kỳ ý tưởng cho điều này?
borchero

tôi có nhiều quyền kiểm soát. làm thế nào để cho phép sao chép dán chỉ trên một điều khiển?
Gaucho

Điều này không hoạt động với UITextView, mặc dù tôi đã thấy giải pháp này được đề xuất ở một số nơi trên SO. Có ai đã tìm ra cách để làm điều này?
Pigpocket

67

Lớp con UITextView và ghi đè lên canBecomeFirstResponder:

- (BOOL)canBecomeFirstResponder {
    return NO;
}

Lưu ý rằng điều này chỉ áp dụng cho UITextViews không thể chỉnh sửa! Chưa thử nghiệm nó trên những cái có thể chỉnh sửa ...


Tôi nghĩ return NO;về - (BOOL)canPerformAction:(SEL)action withSender:(id)senderphương pháp là một lựa chọn tốt hơn.
Islam Q.

29

Nếu bạn muốn tắt tính năng cắt / sao chép / dán trên tất cả UITextView ứng dụng của mình, bạn có thể sử dụng một danh mục với:

@implementation UITextView (DisableCopyPaste)

- (BOOL)canBecomeFirstResponder
{
    return NO;
}

@end

Nó lưu một lớp con ... :-)


3
bạn cũng có thể chỉ đặt điều này trong tệp /, của bạn nơi bạn cần hành vi này.
markus_p

4
Điều này chỉ hoạt động như một tác dụng phụ và ngăn chặn UITextViewhoạt động như mong đợi, chẳng hạn như khi nó có thể chỉnh sửa và nhận được liên lạc. Nó là nhiều để ghi đè canPerformAction:withSender:; đó là những gì giao thức dành cho.
jdc

16
Bạn không thể ghi đè một phương pháp một cách an toàn bằng danh mục. Đây là hành vi không xác định. Bạn phải phân lớp để ghi đè một phương thức một cách an toàn.
Rob Napier

2
Lưu ý: Điều này sẽ áp dụng cho tất cả các UITextView trong ứng dụng của bạn. Không phải lý tưởng trong hầu hết thời gian.
bbrame

2
Cũng lưu ý rằng Apple khuyên chống lại điều này : "Nếu tên của một phương thức được khai báo trong một danh mục giống với một phương thức trong lớp ban đầu hoặc một phương thức trong một danh mục khác trên cùng một lớp (hoặc thậm chí là một lớp cha), thì hành vi là không xác định việc triển khai phương thức nào được sử dụng trong thời gian chạy ... [và] có thể gây ra sự cố khi sử dụng danh mục để thêm phương thức vào các lớp Cacao hoặc Cocoa Touch tiêu chuẩn. "
Rob

29

Đây là giải pháp làm việc tốt nhất cho tôi:

UIView *overlay = [[UIView alloc] init];  
[overlay setFrame:CGRectMake(0, 0, myTextView.contentSize.width, myTextView.contentSize.height)];  
[myTextView addSubview:overlay];  
[overlay release];

từ: https://stackoverflow.com/a/5704584/1293949


3
tốt nhất, không có phân lớp ở đây!
Martin Reichl

7
Tôi thích cách tiếp cận băng keo và dây kiện ở đây. Tôi ước tôi có thể +1 bạn một lần nữa :) Thay vào đó, đây là một ngôi sao vàng: i.imgur.com/EXLFt1Z.jpg
jdc Ngày

22

@rpetrich câu trả lời phù hợp với tôi. Tôi đang đăng mã mở rộng để phòng trường hợp ai đó tiết kiệm thời gian.

Trong trường hợp của tôi, tôi không muốn bất kỳ cửa sổ bật lên nào, nhưng tôi muốn UITextField có thể trở thành người phản hồi đầu tiên.

Thật không may, bạn vẫn nhận được cửa sổ bật lên của kính lúp khi bạn chạm và giữ trường văn bản.

@interface NoSelectTextField : UITextField

@end

@implementation NoSelectTextField

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(paste:) ||
        action == @selector(cut:) ||
        action == @selector(copy:) ||
        action == @selector(select:) ||
        action == @selector(selectAll:) ||
        action == @selector(delete:) ||
        action == @selector(makeTextWritingDirectionLeftToRight:) ||
        action == @selector(makeTextWritingDirectionRightToLeft:) ||
        action == @selector(toggleBoldface:) ||
        action == @selector(toggleItalics:) ||
        action == @selector(toggleUnderline:)
        ) {
            return NO;
    }
    return [super canPerformAction:action withSender:sender];
}

@end

Swift 4

class NoSelectTextField: UITextField {

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(paste(_:)) ||
            action == #selector(cut(_:)) ||
            action == #selector(copy(_:)) ||
            action == #selector(select(_:)) ||
            action == #selector(selectAll(_:)) ||
            action == #selector(delete(_:)) ||
            action == #selector(makeTextWritingDirectionLeftToRight(_:)) ||
            action == #selector(makeTextWritingDirectionRightToLeft(_:)) ||
            action == #selector(toggleBoldface(_:)) ||
            action == #selector(toggleItalics(_:)) ||
            action == #selector(toggleUnderline(_:)) {
            return false
        }
        return super.canPerformAction(action, withSender: sender)
    }

}

1
Vui lòng đăng một phiên bản nhanh chóng cho việc này. cảm ơn bạn.
Salman Khakwani

@pinch: tnx. Vẫn giữ nước trong iOS 12.1.3.
YvesLeBorg

20

Nếu bạn không cần UITextView để cuộn, thì giải pháp đơn giản nhất không liên quan đến phân loại phụ là chỉ cần tắt tương tác của người dùng đối với chế độ xem văn bản:

textField.userInteractionEnabled = NO;

2
Điều này làm mất đi việc khai thác các liên kết, v.v. nếu đó là những gì có trong chế độ xem văn bản. Cần lưu ý rằng đây không phải là một giải pháp tốt khi bạn muốn ẩn vùng chọn / sao chép / dán, nhưng cũng giữ cho một số mức độ tương tác được bật.
barfoon

3
Chà, tôi đã nghĩ điều đó sẽ hiển nhiên.
Luke Redpath

Tôi đang sử dụng các trường văn bản làm nhãn cho ảnh trong trò chơi và tôi không muốn kính lúp xuất hiện và không có lý do gì để sao chép văn bản. Điều này làm việc tuyệt vời cho tôi. Tôi đang sử dụng văn bản được tạo kiểu trong UIWebView và dòng tương tự cũng hoạt động ở đó.
JScarry 17/02/13

15

Cách dễ nhất là tạo một lớp con của UITextView ghi đè canPerformAction: withSender:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender    
{    
     [UIMenuController sharedMenuController].menuVisible = NO;  //do not display the menu
     [self resignFirstResponder];                      //do not allow the user to selected anything
     return NO;
}

Đây là giải pháp tốt nhất để có thể nhập văn bản mà không cần nhập văn bản nào khác, và cho phép các thao tác trên trường văn bản không còn bị 'chặn'. Điều này thực hiện những gì OP muốn, và hơn thế nữa.
mã hlfcoding vào

13

Khi tôi trả về NO trong canPerformAction trên iOS 7, tôi sẽ gặp rất nhiều lỗi như sau:

<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

Giải pháp của tôi là như sau:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];
    }];
    return [super canPerformAction:action withSender:sender];
}

Bí quyết là ẩn bộ điều khiển menu trong chu kỳ tiếp theo trên hàng đợi chính (ngay sau khi nó được hiển thị).


thực sự tốt đẹp. vấn đề duy nhất là tôi có 2 textview và một textField và tôi muốn tránh chỉ sao chép-dán trên các trường textView. làm thế nào để xác định ai đã gọi canPerformAction? biến người gửi là UIMenuController
Gaucho

1
Nó hoạt động trên lớp con của UITextField (hoặc UITextView). Nếu bạn không sử dụng lớp con bạn đã tạo, nó sẽ không có bất kỳ tác dụng nào. Ví dụ: tôi đã tạo một TextFieldWithoutCopyPaste và sử dụng nó mà tôi không muốn có chức năng sao chép dán.
Adam Wallner

OK bạn nói đúng. Nhưng trong trường hợp của tôi, textView cần lớp con để sử dụng canPerformAction và textField cần lớp con để sử dụng textFieldDidBeginE Chỉnh sửa để tạo hoạt ảnh cho cửa sổ khi bàn phím được hiển thị. hoạt ảnh di chuyển cửa sổ bằng bàn phím. Tôi sử dụng phương pháp này để tránh bàn phím che mất textField.
Gaucho

10

Đây là cách dễ nhất để tắt toàn bộ Menu Chọn / Sao chép / Dán trong UITextView

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{    
    [UIMenuController sharedMenuController].menuVisible = NO;
    return NO;    
}

Cũng hoạt động cho UITextField. Cám ơn vì đã chia sẻ.
Gaurav Srivastava

1
Tôi đang sử dụng mã trên vẫn nhận được menu làm thế nào để vô hiệu hóa đó xin vui lòng giúp tôi.
Bittoo

4

Kể từ iOS 7 có một thuộc tính trên UITextView:

 @property(nonatomic,getter=isSelectable) BOOL selectable;

Điều này ngăn chế độ xem cho phép lựa chọn văn bản. Làm việc tuyệt vời cho tôi.


4

Nếu bạn đang tìm cách thay thế bàn phím bằng một, giả sử UIPickernhư là inputView(tất nhiên là một thanh công cụ inputAccesotyView), thì giải pháp này có thể giúp ...

  • Triển khai thực hiện textFieldShouldBeginEditing:
  • bên trong đặt textField.userInteractionEnabled = NO;
  • Sau đó, khi bạn chuẩn bị đóng UIPickerView, hãy đặt nó thành CÓ.

Bằng cách làm này, bạn có thể nhấn vào UITextFieldvà hiển thị các tùy chọn để lựa chọn UIPickerView, tại thời điểm này, bạn UITextFieldsẽ thực sự không phản ứng với bất kỳ sự kiện chạm nào (điều này bao gồm chạm và giữ để cắt, sao chép và dán). Tuy nhiên, bạn sẽ phải nhớ đặt nó trở lại CÓ khi bạn đóng tài khoản của mình, UIPickerViewtuy nhiên bạn sẽ không thể truy cập UIPickerViewlại.

Thời điểm duy nhất khi nó không thành công là khi người dùng bắt đầu bằng cách chạm và giữ UITextView, sau đó bạn sẽ thấy bản sao cắt và dán lại lần đầu tiên. Đây là lý do tại sao bạn nên luôn xác nhận đầu vào của mình. Đây là cách dễ nhất tôi có thể nghĩ đến. Tùy chọn khác là sử dụng UILabelcho văn bản chỉ đọc nhưng bạn bỏ lỡ rất nhiều chức năng tuyệt vời từ đó UITextView.


4

UITextView lớp con - nhanh chóng 4.0

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

Thật kỳ lạ? nó vẫn hiển thị tùy chọn "Dán" nhưng không thực hiện nếu được nhấn ...
iOS Flow

4

Nếu bạn muốn tắt cửa sổ bật lên UITextFieldthì hãy thử UITextFieldDelegatephương pháp này để chuyển đổi isUserInteractionEnabled.

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    textField.isUserInteractionEnabled = false
    return true
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    textField.isUserInteractionEnabled = true
    return true
}

3

Điều này có thể được thực hiện dễ dàng trong bảng phân cảnh (Xcode 6). Chỉ cần bỏ chọn Có thể chỉnh sửa và Có thể chọn trong Trình kiểm tra thuộc tính. Bạn vẫn có thể cuộn chế độ xem văn bản.nhập mô tả hình ảnh ở đây


3

Điều này đã làm việc cho tôi. Đảm bảo rằng bạn đang gọi resignFirstResponder trên textView

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
  [self.textView resignFirstResponder];
  return NO;
}

2

Tôi đã cung cấp một câu trả lời có hiệu quả ở đây để tắt tính năng chọn văn bản + kính lúp, giữ các liên kết có thể kéo được bật Hy vọng điều đó sẽ giúp:

Sau một thời gian dài cố gắng, tôi đã cố gắng dừng việc chọn văn bản, phóng to và giữ phát hiện dữ liệu (liên kết có thể nhấp, v.v.) bằng cách ghi đè addGestureRecognizer trên một lớp con UITextView chỉ cho phép UILongPressGestureRecognizer trì hoãn kết thúc chạm:

UIUnselectableTextView.m

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && gestureRecognizer.delaysTouchesEnded)
    {
        [super addGestureRecognizer:gestureRecognizer];
    }
}

2

Đối với Swift 3, nó được thay đổi thành:

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

2

Bạn có thể sửa lỗi này trong bảng phân cảnh của mình bằng cách bỏ chọn các hộp sau:

nhập mô tả hình ảnh ở đây

Hoặc bạn có thể đặt theo chương trình như sau:

textView.selectable = false
textView.editable = false

1

Tôi đã làm xong rồi. Trên của tôi, UITextViewtôi đã tắt tùy chọn cắt, sao chép, chọn, v.v. rất dễ dàng.

Tôi đã đặt một UIViewở cùng một nơi mà tôi đã đặt UITextView, nhưng trên self.viewvà thêm một touchDelegatephương thức như sau:

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *scrollTouch=[touches anyObject];
    if(scrollTouch.view.tag==1)
    {
        NSLog(@"viewTouched");
        if(scrollTouch.tapCount==1)
            [textView1 becomeFirstResponder];
        else if(scrollTouch.tapCount==2)
        {
            NSLog(@"double touch");
            return;
        }

    }
}

và nó đã làm việc cho tôi. Cảm ơn bạn.


1

Nhanh

textView.selectable = false // disable text selection (and thus copy/paste/etc)

Có liên quan

textView.editable = false // text cannot be changed but can still be selected and copied
textView.userInteractionEnabled = false // disables all interaction, including scrolling, clicking on links, etc.

1

Nếu bạn muốn thêm một tùy chọn tùy chỉnh vào UITextView của mình nhưng vô hiệu hóa các chức năng hiện có thì đây là cách bạn thực hiện trên Swift 3 :

Để tắt tính năng sao chép, dán, cắt tính năng tạo một lớp con và ghi đè lên các lớp sau:

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

Trên ViewController, bạn có CustomTextView của mình thêm những thứ sau để thêm các tùy chọn của bạn:

  let selectText = UIMenuItem(title: "Select", action: #selector(ViewController.selected))

    func selected() {

    if let selectedRange = textView.selectedTextRange, let 
     selectedText = textView.text(in: selectedRange) {

     }


    print("User selected text: \(selectedText)")

    }

1

Phương pháp này sẽ vô hiệu hóa hoàn toàn menu Chọn, Chọn tất cả, Dán. Nếu bạn vẫn nhận được một số hành động khác, thì chỉ cần thêm hành động đó vào điều kiện if như bên dưới.

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender // This is to disable select / copy / select all / paste menu
    {
        if (action == @selector(copy:) || action == @selector(selectAll:) || action == @selector(select:) || action == @selector(paste:))
            return NO;
        return [super canPerformAction:action withSender:sender];
    }

0

Bạn chỉ có thể tạo danh mục như thế này:

UITextView + Selectable.h

@interface UITextView (Selectable)

@property (nonatomic, assign, getter = isTextSelectable) bool textSelectable;

@end

UITextView + Selectable.m

#import "UITextView+Selectable.h"

#import <objc/runtime.h>

#define TEXT_SELECTABLE_PROPERTY_KEY @"textSelectablePropertyKey"

@implementation UITextView (Selectable)

@dynamic textSelectable;

-(void)setTextSelectable:(bool)textSelectable {
    objc_setAssociatedObject(self, TEXT_SELECTABLE_PROPERTY_KEY, [NSNumber numberWithBool:textSelectable], OBJC_ASSOCIATION_ASSIGN);
}

-(bool)isTextSelectable {
    return [objc_getAssociatedObject(self, TEXT_SELECTABLE_PROPERTY_KEY) boolValue];
}

-(bool)canBecomeFirstResponder {
    return [self isTextSelectable];
}

@end

1
Đây không phải là một cách tốt để giải quyết nó. Thứ nhất, nó ảnh hưởng đến mọi thứ, vì nó nằm trong danh mục. Thứ hai, việc sử dụng các đối tượng được liên kết cho nhiệm vụ khá dễ dàng có thể gây ra nhiều rắc rối hơn sau này với việc gỡ lỗi (tại sao nó hoạt động như thế này khi bạn quên những gì bạn đã làm) hơn là mang lại lợi nhuận. Theo tôi, thật tốt để tránh nó bất cứ khi nào có thể. Làm cho mã ít dễ tìm và gỡ lỗi và hiểu bởi lập trình viên mới trong dự án.
Vive

0

Phân lớp con UITextViewvà ghi đè - (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizerlà một khả năng khác để vô hiệu hóa các hành động không mong muốn.

Sử dụng lớp của gestureRecognizer-object để quyết định xem có nên thêm hành động hay không.


0

(SWIFT) Nếu bạn chỉ muốn một trường văn bản cơ bản mà không có tùy chọn menu hoặc kính lúp nào thì hãy tạo một lớp con của UITextField trả về giá trị false cho scrollRecognizerShouldBegin:

class TextFieldBasic: UITextField {
    override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {

        return false
    }
}

Thao tác này sẽ bỏ qua tất cả chức năng cảm ứng trên trường văn bản nhưng vẫn cho phép bạn sử dụng bàn phím bật lên để thêm / xóa ký tự.

Nếu bạn đang sử dụng bảng phân cảnh, chỉ cần gán lớp mới được tạo cho trường văn bản hoặc nếu bạn đang tạo trường văn bản theo chương trình:

var basicTextField = TextFieldBasic()
basic = basicTextField(frame: CGRectMake(10, 100, 100,35))
basic.backgroundColor = UIColor.redColor()
self.view.addSubview(basic)

basic.becomeFirstResponder()

0
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool 
{
    NSOperationQueue .mainQueue().addOperationWithBlock({ () -> Void in   

        [UIMenuController .sharedMenuController() .setMenuVisible(false, animated: true)]

    })
    return super.canPerformAction(action, withSender: sender)}

0

Swift 3

Để làm điều này, bạn cần phân lớp UITextView của mình và đặt phương thức này.

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if (action == #selector(copy(_:))) {
            return false
        }

        if (action == #selector(cut(_:))) {
            return false
        }

        if (action == #selector(paste(_:))) {
            return false
        }

        return super.canPerformAction(action, withSender: sender)
    }

0

UITextView có hai thuộc tính sẽ thực hiện những gì bạn cần: isSelectableisEditable .

Đặt isEditable thành false bạn sẽ tránh được việc người dùng chỉnh sửa văn bản và đặt isSelectable thành false bạn sẽ tránh được việc người dùng chọn văn bản bên trong textView của bạn, vì vậy điều này sẽ ngăn menu hành động được hiển thị.


0

Vui lòng tìm mã mẫu để tham khảo:

 override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(copy(_:)) || action == #selector(paste(_:)) || action == #selector(UIResponderStandardEditActions.paste(_:)) ||
            action == #selector(replace(_:withText:)) ||
            action == #selector(UIResponderStandardEditActions.cut(_:)) ||
        action == #selector(UIResponderStandardEditActions.select(_:)) ||
        action == #selector(UIResponderStandardEditActions.selectAll(_:)) ||
        action == #selector(UIResponderStandardEditActions.delete(_:)) ||
        action == #selector(UIResponderStandardEditActions.makeTextWritingDirectionLeftToRight(_:)) ||
        action == #selector(UIResponderStandardEditActions.makeTextWritingDirectionRightToLeft(_:)) ||
        action == #selector(UIResponderStandardEditActions.toggleBoldface(_:)) ||
        action == #selector(UIResponderStandardEditActions.toggleItalics(_:)) ||
        action == #selector(UIResponderStandardEditActions.toggleUnderline(_:)) ||
        action == #selector(UIResponderStandardEditActions.increaseSize(_:)) ||
        action == #selector(UIResponderStandardEditActions.decreaseSize(_:))

       {
            return false
        }

        return true
    }

-1

Sử dụng func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }thay cho textFieldShouldBeginEditing.

class ViewController: UIViewController , UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        //Show date picker
        let datePicker = UIDatePicker()
        datePicker.datePickerMode = UIDatePickerMode.date
        textField.tag = 1
        textField.inputView = datePicker
    }

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        if textField.tag == 1 {
            textField.text = ""
            return false
        }

        return true
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField.tag == 1 {
            textField.text = ""
            return false
        }

        return true
    }
}

Tạo một lớp mới với tên StopPasteAction.swift

import UIKit

class StopPasteAction: UITextField {

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

Thêm lớp mới lớp với bạn TextField hiện tại

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.