Mon uIView contient deux uitextfield.Je besoin de restreindre la copie, l'option Coller pour un seul textefield.Je ne veut pas restreindre cela pour un autre.
Lorsque j'utilise le code suivant, le champ est restreint de copie. , Coller. P>
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender { if ( [UIMenuController sharedMenuController] ) { [UIMenuController sharedMenuController].menuVisible = NO; } return NO; }
4 Réponses :
Créer une sous-classe d'Uitextfield. Dans cette sous-classe, implémentez
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (sel_isEqual(action, @selector(copy:))) { return NO; } return [super canPerformAction:action withSender:sender]; }
Sa amende ... mais je ne veux pas afficher de menu (couper, copier, coller, sélectionner, etc.,) Pour le champ Uitextfield restreint.
Vous pouvez essayer votre [uimenucontroller SharedMenucontroller] .Menuvisible code> Chose à l'intérieur de
-Canperformaction: code> dans ce cas. Tant que vous ne le faites que de votre sous-classe, cela devrait se comporter comme prévu.
Pourriez-vous toujours retourner non pour désactiver toutes les actions?
@kevboh je ne vois aucune raison pour laquelle tu ne peux pas.
Eh bien, vous y allez, pas de menu = retourner non.
J'ai essayé cela et j'ai reçu un message sur Del_isequal qui n'est pas autorisé en C99, donc je viens d'utiliser (action == @selector (copie :)) et il semble fonctionner.
@Markleonard: Vous devrez peut-être avoir à #import
sel_isequal () code>.
@Kevinballard Que dois-je faire si j'ai ajouté uitextfield code> dans
utableview code> pour un seul
uitextfield code>.
Explanation d'Apple: P>
cette implémentation par défaut de cette méthode renvoie oui si le répondeur La classe implémente l'action demandée et appelle le prochain répondeur s'il ne fait pas. Les sous-classes peuvent remplacer cette Méthode pour activer les commandes de menu basées sur la base sur l'état actuel; Par exemple, vous activerait la commande de copie s'il est une sélection ou désactiver la pâte commande si la carte de pâte n'est pas contenir des données avec le bon Type de représentation de pâte de pâte. p> blockQuote>
Donc, la solution consiste à sous-classer l'UITEXTVIEW et à revenir correctement. p>
Les suivants empêchent toute ficelle de plus de 1 caractère à coller. Chaîne qui est longue de 1 caractère va bien passer (pourrait être utile à certaines personnes - n'a pas besoin de sous-classement).
Donnez d'abord votre Textfield un délégué P>
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if ( [string length] > 1) { return NO; } return YES; }
@CBDHAC: Merci pour votre réponse.Mais la chose est que je ne veux pas coller un seul caractère aussi.
Ce code n'empêchera pas les chaînes avec plus de 1 caractère traversant, il empêchera des chaînes avec plus de 1 octets qui traversent ... Donc, cela empêchera l'utilisateur de taper des caractères Unicode avec plus de 1 octet également (comme les caractères Emoji ).
J'ai eu une idée aléatoire qui a fonctionné parfaitement sur une vue texte. Aucune raison pour laquelle cela ne fonctionnerait pas sur un champ de texte.
J'ai ajouté ce qui suit au champ de texte que je voulais restreindre. P>
a ensuite attribué le code suivant à celui-ci. P>
- (IBAction)cancelTouch:(id)sender { //do nothing }
Avez-vous essayé de définir la définition
userinterAcédactionNabled code> à
non code>? Ou l'UITEXTVIEW devrait-elle toujours être modifiable?
@afeken je pense que ça devrait être éditable