Comment avez-vous VRAIMENT supprimer la Copie de UIMenuController
Il semble être un moyen facile pour éviter le "Plus..." étiquette figurant dans UIMenuController lorsque vous avez ajouté plus d'un élément de menu personnalisé. Vous avez juste eu à enlever tous les éléments de menu système. Il y avait même un solution de contournement pour toujours avoir de la copie de travail. Vous avez juste eu à mettre en œuvre une copie personnalisée de commande à l'aide d'un autre sélecteur, puis remplacer canPerformAction:withSender: pour ne pas montrer le système de copie:
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(copy:))
return NO;
else
//logic to show or hide other things
}
Malheureusement, cette méthode ne fonctionne plus (au moins dans une UIWebView sous-classe). canPerformAction:withSender: est appelé pour chaque option de menu de système à l'exception de copie: si le résultat est que le système de copie de l'élément de menu est affichée en permanence. Cela signifie que si vous avez plus d'un élément de menu personnalisé, ils sont toujours cachés derrière les "Plus..."
Donc, est-il un moyen de vraiment supprimer le système de la copie ou de l'élément de quelque autre façon à empêcher les éléments de menu à partir se cacher derrière les "Plus..."?
Mise à jour
C'est le résultat que j'obtiens quand je remplace canPerformAction:withSender: notez que la méthode n'est jamais appelé à la "copie:" action:
cannot perform action cut: with sender <UIMenuController: 0x7227d30>.
cannot perform action select: with sender <UIMenuController: 0x7227d30>.
cannot perform action selectAll: with sender <UIMenuController: 0x7227d30>.
cannot perform action paste: with sender <UIMenuController: 0x7227d30>.
cannot perform action delete: with sender <UIMenuController: 0x7227d30>.
cannot perform action promptForReplace: with sender <UIMenuController: 0x7227d30>.
cannot perform action _showMoreItems: with sender <UIMenuController: 0x7227d30>.
cannot perform action _setRtoLTextDirection: with sender <UIMenuController: 0x7227d30>.
cannot perform action _setLtoRTextDirection: with sender <UIMenuController: 0x7227d30>.
can perform action customCopy: with sender <UIMenuController: 0x7227d30>.
can perform action custom1: with sender <UIMenuController: 0x7227d30>.
cannot perform action custom2: with sender <UIMenuController: 0x7227d30>.
can perform action custom3: with sender <UIMenuController: 0x7227d30>.
can perform action custom4: with sender <UIMenuController: 0x7227d30>.
cannot perform action cut: with sender <UIMenuController: 0x7227d30>.
cannot perform action select: with sender <UIMenuController: 0x7227d30>.
cannot perform action selectAll: with sender <UIMenuController: 0x7227d30>.
cannot perform action paste: with sender <UIMenuController: 0x7227d30>.
cannot perform action delete: with sender <UIMenuController: 0x7227d30>.
cannot perform action promptForReplace: with sender <UIMenuController: 0x7227d30>.
cannot perform action _showMoreItems: with sender <UIMenuController: 0x7227d30>.
cannot perform action _setRtoLTextDirection: with sender <UIMenuController: 0x7227d30>.
cannot perform action _setLtoRTextDirection: with sender <UIMenuController: 0x7227d30>.
- Apparemment, il n'existe aucun moyen de supprimer la copie de UIMenuController dans Objective-C, mais il est possible à l'aide de CSS:
-webkit-user-select:none;
iphonedevsdk.com/forum/iphone-sdk-development/... - Peut-être que je n'étais pas assez claire dans le paragraphe d'ouverture, mais je n'essaie pas d'empêcher la sélection de l'utilisateur. Je suis en train de mettre plus d'un élément de menu personnalisé dans UIMenuController sans être coincé sous le "Plus..." dans le menu. Vous avez utilisé pour être en mesure de le faire par la prévention de la commande de Copie à partir apparaître (stackoverflow.com/questions/4311009/...), mais qui ne fonctionne plus.
- que voulez-vous dire "ne fonctionne plus"? est-il cassé dans iOS5 ou quelque chose?
- Par "ne fonctionne plus", je veux dire que la solution posté ici: stackoverflow.com/questions/3255070/... ne fonctionne pas. Il a apparemment utilisé pour. D'autres (stackoverflow.com/questions/4311009/...) ont également trouvé que cette solution ne fonctionne pas. Comme je l'ai mentionné dans ma mise à jour, la méthode de remplacement n'est jamais appelé à la "copie".
- Avez-vous enfin trouver une solution pour les versions plus récentes?
- Aussi remarque ... stackoverflow.com/questions/19280119/...
Vous devez vous connecter pour publier un commentaire.
La technique liée à semble fonctionner. J'ai mis en place un
UIWebView
sous-classe, avec ces méthodes, et seulement A et B éléments apparaissent.pour ios >= 5.1 canPerformAction:(SEL)de l'action withSender:(id)sender ne fonctionne plus.
Si vous êtes ok avec juste désactiver l'action de collage voici une méthode:
ajouter UITextFieldDelegate à vous-vue-contrôleur et de mettre en œuvre la méthode comme ceci
cela signifie que si l'utilisateur de saisir plus d'un caractère pour chaque action (c'est à dire que, probablement, l'utilisateur est le collage de quelque chose.) ne pas l'accepter dans textfield.
c'est une bonne pratique pour forcer l'utilisateur d'entrer textfields comme l'e-mail et
lemnar réponse est bonne. Mise en œuvre d'une sous-classe de la UIWebView fonctionne très bien. Cette exemple est OK pour un UITextView. Pour une UIWebView, créez une sous-classe personnalisée comme suit:
Et:
Alors, au lieu d'instancier UIWebView, utilisez MyUIWebView.
Mise à JOUR:
Si vous avez envie de désactiver la "copie", mais laisser "définir" (et de "traduire"), qui peut être utile, c'est la façon de le faire; remplacer
canPerformAction:withSender
ci-dessus avec ceci:Voici une solution pour iOS5.x qui fonctionne pour moi. C'est par Josh Garnham, ce qui suggère la création d'un UIWebBrowserView Catégorie d'attraper la copie: de la pâte, de:, de définir: les sélecteurs.
http://ios-blog.co.uk/iphone-development-tutorials/rich-text-editing-highlighting-and-uimenucontroller-part-3/
Note juste FTR: Il y a une légère faute de frappe sur l'excellence de la page web. Voici précisément comment vous le faites. Apple va 100% rejettent cette idée. Faire une catégorie
(Vous devez tapez "UIWebBrowserView" depuis Xcode ne sont pas mettre privée les classes.) Texte intégral de la .h et .m fichiers:
Pour l'enregistrement, un "simple clic" va encore faire monter l'ennuyeux correcteur d'orthographe suggestions! Mais sinon, il n'supprimer la double-cliquez sur le contexte-menu totalement, il est 100% rejetée par Apple.
Je suis désolé pour mon anglais.
Mais il y a une idée.
Je pense que la méthode canPerformAction ont été appelés pour de nombreuses fois, mais vous venez de traiter avec elle une fois.
Dans ce cas ,je pense qu'il y a peut être un autre Contrôle d'INTERFACE utilisateur l'a appelé. Par exemple, le UITextView de contrôle dans votre UIWebView.
Je suppose que vous pouvez générer l'INTERFACE utilisateur en storyboard. Pas tous les contrôles dans le storyboard a sa propre classe. Vous pouvez définir une classe pour le contrôle de réponse et de réécrire son canPerformAction méthode.
Vous pouvez dessiner votre propre menu au lieu d'utiliser UIMenuController. De cette façon, vous pouvez avoir autant d'éléments que vous souhaitez afficher dans le même temps, sans l'aide d'Autres.