[Swift]-[UITextView] Comment supprimer le Couper coller ?

Sur une UITextView je voudrais supprimer le Couper-Coller ? qui en plus apparait en Anglais !!


Réponses

  • Demande à  un moteur de recherche "uitextview disable copy cut". Il y a des tas de réponses sur le Net, en .. anglais. 


  • T'as une méthode à  override qui te permet de spécifier quelles actions tu peux faire : 



     


    canPerformAction:



     


    Mais tu dois créer une nouvelle classe qui va hériter de UITextField.


  • Merci a tous les deux. 


    J'ai un peu tout tripoter en faisant une classe qui hérite d'UITextField. Je n'ai pas vraiment une grande maitrise, mais la fonction canPerformAction: n'est pas appelée...


     


    J'ai tenté l'extension pas une vraie maitrise non plus...


     


    J'ai un peu attendu d'avoir fait plusieurs essais avant de vous remercier.


  • Est-ce que tu utilises bien ta classe personnalisée qui hérite de UITextField ?


  • Normalement oui !!

    Bien spécifié dans IB, par contre juste changer le nom de la classe dans le code !! Peut-être dois-je recréer l'ourlet ?
  • J'ai le message suivant qui explique : 


     


    "Unknown class UITextFieldNotCC in Interface Builder file."


     


    La déclaration de la classe était initialement faite dans le même ficher, mais maintenant c'est dans un fichier différent ?


     


    Je n'ai pas trop l'habitude et j'ai du zapper quelque chose !!!


  • CéroceCéroce Membre, Modérateur
    avril 2017 modifié #8
    Quand le storyboard/nib est chargé, Cocoa essaie d'instancier un UITextFieldNotCC, puisque c'est le nom de classe que tu as spécifié. Ce qui est juste.

    Le problème est qu'il n'y parvient pas, sans doute parce que la classe est introuvable dans l'appli. Vérifie que UITextFieldNotCC est bien associé à  la target de l'application. (doit être coché dans la barre latérale droite).
  • GercofisGercofis Membre
    avril 2017 modifié #9

    donc dans la colonne de droite 3ème icône "Show ..."


    Il y avait bien le nom de la classe. Dans la zone module il faut rentrer le nom du Target, ou cocher Inherit From Target juste en dessous.


     


    Je n'ai pas tout-a-fait solutionné mon problème, mais en tous cas je n'ai plus cette erreur et ma classe héritée est bien prise en compte cette fois.


     


    En fait ce que tu disais mais que je ne captais pas... Vraiment merci...


     


    Voilà  ce que j'ai fait et le CC n'apparait plus il ne reste que la loupe



    class UITextFieldNotCC: UITextField {
    override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    print("canPerformAction")// histoire de vérifier
    return false
    }
    }


    En fait mon vrai petit problème n'était pas celui-la, mais simplement d'éviter que cette zone ait une valeur a Zéro qui faisait planté dans la multiplication qui suit.


     


    J'ai vu qu'il existait une solution qui vérifie la saisie et annule soit les lettres soit les chiffres, pour les lettres hormis la double virgule ( qui fait planter grave !! ) avec le clavier numérique c'est difficilement possible. Je ne retrouve plus ce code mais bon pas un vrai problème non plus disons que c'est pour le fun et si des fois ça peut servir.


  • Si tu implémentés le délégué UITextFieldDelegate, tu as des méthodes qui te permettent d'obtenir l'évènement d'un nouveau caractère qui s'ajoute au champs et de pouvoir l'annuler. Tu peux donc solutionner ton réel problème ainsi.


  • Joanna CarterJoanna Carter Membre, Modérateur
    avril 2017 modifié #11


    Sur une UITextView je voudrais supprimer le Couper-Coller ? qui en plus apparait en Anglais !!




     


    Tu l'essais sur un appareil ou dans le simulateur ? Si dans le simulateur, c'est parce que tu n'as pas encore réglé la region, etc.


     




    donc dans la colonne de droite 3ème icône "Show ..."


    Il y avait bien le nom de la classe. Dans la zone module il faut rentrer le nom du Target, ou cocher Inherit From Target juste en dessous.




     


    Je ne trouve pas de ce que tu parles. après que tu as saisi le nom de la classe, dont la zone t'aide en proposant ta classe, il n'y a rien à  saisir dans la zone module, c'est rempli automatiquement, mais en texte gris


     




    En fait mon vrai petit problème n'était pas celui-la, mais simplement d'éviter que cette zone ait une valeur a Zéro qui faisait planté dans la multiplication qui suit.


     


    J'ai vu qu'il existait une solution qui vérifie la saisie et annule soit les lettres soit les chiffres, pour les lettres hormis la double virgule ( qui fait planter grave !! ) avec le clavier numérique c'est difficilement possible. Je ne retrouve plus ce code mais bon pas un vrai problème non plus disons que c'est pour le fun et si des fois ça peut servir.




     


    Pour ça, il faut implémenter le UITextFieldDelegate, surtout la méthode



    textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

    Là  dedans, tu peux vérifier n'importe quel caractère, n'oubliant pas que, si le replacementString soit vide, c'est d'une touche de clavier comme supprimer, etc.


     


    Mois, je capte la méthode textFieldShouldBeginEditing pour remplacer le texte formaté avec les chiffres "nus", et textFieldDidEndEditing pour remplacer les chiffres nus avec le texte formaté.


     


    Question : si tu veux empêcher le 0, qu'est-ce que tu veux arriver autrement ? Tu veux bloquer l'utilisateur de quitter la zone ? Tu veux mettre 1 comme défaut ? Quoi ?


  • @Maggic éventuellement si tu m'en dis un peu plus ? Mais bon ce n'est pas un réel problème non plus ..


     


    @joannaCarter


    Gercofis, on 25 Apr 2017 - 11:11 PM, said:


    snapback.png




    donc dans la colonne de droite 3ème icône "Show ..."


    Il y avait bien le nom de la classe. Dans la zone module il faut rentrer le nom du Target, ou cocher Inherit From Target juste en dessous.




     


    Gercofis, on 21 Apr 2017 - 11:11 PM, said:


    snapback.png




    Sur une UITextView je voudrais supprimer le Couper-Coller ? qui en plus apparait en Anglais !!




     


    Tu l'essais sur un appareil ou dans le simulateur ? Si dans le simulateur, c'est parce que tu n'as pas encore réglé la region, etc.


    Je ne trouve pas de ce que tu parles. après que tu as saisi le nom de la classe, dont la zone t'aide en proposant ta classe, il n'y a rien à  saisir dans la zone


    module, c'est rempli automatiquement, mais en texte gris


     


     


    quand on sélectionne un texteditafield dans le storyboard on a une colonne a droite qui est éventuellement disponible avec le 3ène icône de la barre on a 2 champs dans la zone custom class le nom et le module c'est dans ce dernier qu'il faut soit inclure le nom du projet soir cocher "Inherite From target". Cette dernière partie semble un peu fantaisiste puisqu'en écrivant ici et en vérifiant la coche a disparue... mais bon plus d'erreur en tous cas.


     


     



    ça fait pareil sur le simulateur et sur l'iPhone. Mais j'ai observé dans les options du projet je sais plus ou que c'était compilé pour l'anglais...


     


    c'est un peu curieux vu qu'il m'affiche bien des résultats en Euro avec la virgule avant les 2 derniers chiffres..


  • Joanna CarterJoanna Carter Membre, Modérateur
    avril 2017 modifié #13


     


    quand on sélectionne un texteditafield dans le storyboard on a une colonne a droite qui est éventuellement disponible avec le 3ène icône de la barre on a 2 champs dans la zone custom class le nom et le module c'est dans ce dernier qu'il faut soit inclure le nom du projet soir cocher "Inherite From target". Cette dernière partie semble un peu fantaisiste puisqu'en écrivant ici et en vérifiant la coche a disparue... mais bon plus d'erreur en tous cas.




     


    Tu peux nous montrer une capture d'écran ?


     




     


    ça fait pareil sur le simulateur et sur l'iPhone. Mais j'ai observé dans les options du projet je sais plus ou que c'était compilé pour l'anglais...



     


    c'est un peu curieux vu qu'il m'affiche bien des résultats en Euro avec la virgule avant les 2 derniers chiffres..





     


     


    Bah ouais. Il faut changer le langage de développement et verifier que, sur le simulateur, que le langage soit bien Français, que tu as enlevé le langage English (US) de la liste des langages préférés, peut-être ajoutant le English (UK) mais en garant le langage principal comme Français.


     


    Puis, vérifies que la région soit bien France.


     


    Mais, je crois c'est plutôt le langage de développement qu'il faut changer, car c'est le dossier de localisation Base.lproj qui déterminent le langage primaire.


     


    Cherches pour "Localisation native development region" dans la page Info du projet


  • GercofisGercofis Membre
    avril 2017 modifié #14
  • Joanna CarterJoanna Carter Membre, Modérateur

    Côté capture d'écran... Supprimes le texte dans la zone Module - tu devrais y voir "Current - Tempo" en gris. De ce que je peut trouver, il ne faut pas cocher "Inherit from Target"


     


    As-tu essayé de supprimer les liens comme IBAction ou IBOutlet, nettoyer le projet, faire un rebuild, puis reconnecter les IB...


     


    Côté  langage, il faut vérifier le langage de développement et supprimer toutes les localisations, puis rajouter français comme localisation Base.



  • Côté capture d'écran... Supprimes le texte dans la zone Module - tu devrais y voir "Current - Tempo" en gris. De ce que je peut trouver, il ne faut pas cocher "Inherit from Target"




     


    J'ai juste "Tempo" qui est le nom du programme, la coche du "Inherit from Target" se décoche toute seule...


     


    Pour info en passant "Tempo" est une option EDF qui offre des ristournes plus qu'importantes et du coup ça nous fait 6 tarifs ( Bleu, Blanc,Rouge / jour et nuit ). Ceci me permet donc d'évaluer le coût de tel ou tel chauffage ou appareil Kw * temps et d'avoir les 6 tarifs histoire d'évaluer. Je donne ça a qui demande ou qui voudrait faire évoluer ?


     


    L'anglais n'apparaissait que dans le PopUp du CC et maintenant avec la dernière ligne de code ça n'apparait plus.


     


    Il ne me reste plus que l'histoire de la double virgule qui fait planter grave, je suis donc a fond dans l'implantation du délégate.


     


    Initialement c'était disons un exercice disons utile...

  • Joanna CarterJoanna Carter Membre, Modérateur


    J'ai juste "Tempo" qui est le nom du programme, la coche du "Inherit from Target" se décoche toute seule...




     


    C'est toi qui l'a mis là , ou c'est Xcode qui l'a fait ?


     


     




    L'anglais n'apparaissait que dans le PopUp du CC et maintenant avec la dernière ligne de code ça n'apparait plus.




     


     


    Je viens de tester dans une appli test, bien réglée, et j'y trouve le français.

  • pour la première question c'est moi qui ait coché "Inherit from Targuet", et a l'utilisation suivante xCode me l'a enlevé ? Vas comprendre Charles !!


     


    Pour ce qui est de l'anglais je ne parviens plus a tomber dessus, si des fois tu peux me guider ?


Connectez-vous ou Inscrivez-vous pour répondre.