2014-06-09 3 views
8

zu deaktivieren habe ich versucht,Wie Kopieren/Einfügen-Option in UITextField in ios7

@implementation UITextField (DisableCopyPaste) 

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

return NO; 
return [super canPerformAction:action withSender:sender]; 
} 

@end 

Aber es deaktiviert alle copy/paste Option des Textfeldes, wie die Menüoptionen für bestimmtes Textfeld zu deaktivieren.

+1

Verwenden Sie die Kategorie für UITextField? Wenn ja, Wenn Sie diese Kategorie in Ihrem View-Controller hinzufügen, haben alle Textfelder, die in diesem View-Controller erstellt wurden, keine Copy-Paste-Optionen. – jailani

+0

Ja, ich verstehe, aber die Textfelder in anderen View-Controllern haben auch diese Option nicht – SMS

+0

Also Sie Copy-Paste-Option für bestimmte Textfeld direkt in der gleichen Ansicht Controller deaktivieren möchten? – jailani

Antwort

13

Ich denke, diese Methode ist in Ordnung, da keine Herstellung von Kategorie usw. Es funktioniert gut für mich.

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
     [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; 
    }]; 
    return [super canPerformAction:action withSender:sender]; 
2

Erstellen Sie eine Unterklasse für UITextField und überschreiben Sie die Methode und verwenden Sie sie wo immer Sie wollen.

@interface CustomTextField: UITextField 
@end 

@implemetation CustomTextField 
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    //Do your stuff 
} 
@end 
8

Sie sollten UITextView Unterklasse und canPerformAction:withSender außer Kraft setzen. Textfelder, die kein Kopieren/Einfügen bereitstellen sollten, sollten mit Ihrer Unterklasse definiert werden.

NonCopyPasteField.h:

@interface NonCopyPasteField : UITextField 
@end 

NonCopyPasteField.m:

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

aktualisieren. Swift Version:

class NonCopyPasteField: UITextField { 
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 
    if (action == #selector(copy(_:)) || action == #selector(paste(_:))) { 
     return false 
    } 
    return super.canPerformAction(action, withSender: sender) 
    } 
} 
+0

Jedes schnelle Versionsformat? –

+0

@JayprakashDubey Ich habe die Antwort mit swift Code – ilya

0

in Ihrer Implementierung müssen Sie prüfen, ob der Absender Ihr genaues Textfeld ist, die deaktiviert werden sollen:

@implementation UITextField (DisableCopyPaste) 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    if ((UITextField *)sender == yourTextField) 
     return NO; 

    return [super canPerformAction:action withSender:self]; 
} 

@end 

Aber es ist nicht gut, eine Kategorie zu machen, die eine überschreibt Methode. Es ist besser, wenn Sie eine neue Klasse wie SpecialTextField erstellen, die UITextField erbt, die die Methode immer return NO für canPerformAction: withSender haben: und setzen Sie diese Klasse nur auf die Textfelder, die Copy/Paste deaktiviert haben sollten.

+2

aktualisiert es ist eine schreckliche Idee, eine Methode in einer Kategorie zu überschreiben. Solche Dinge zu empfehlen ist eine andere Sünde. – holex

+0

Ich empfehle es nicht und Sie werden feststellen, dass Sie die ganze Antwort gelesen haben. Der erste Teil der Antwort besteht darin, zu zeigen, wie man nach dem genauen Textfeld sucht, in dem das Kopieren/Einfügen deaktiviert sein sollte, wie @SMS gefragt hat! – o15a3d4l11s2

+0

Auch wenn Sie es nicht empfehlen, warum haben Sie gedacht, dass jemand anderes es benutzen würde? Ich schätze, dieser schreckliche Vorschlag verdient die Downvotes sowieso. – holex