2016-12-02 2 views
2

Je rencontre de nombreux articles sur la désactivation de la pression longue dans UItextView, mais ce même processus ne fonctionne pas pour UITextField et UISearchBar.Comment désactiver le reconnaissance de geste de pression longue dans UITextField et UISearchBar?

Y at-il un moyen de désactiver Appui long sur UITextField et UISearchBar afin que je puisse éviter une loupe sur appui long?

J'ai déjà coché "Disable Magnifying Glass in UITextField" mais la solution donnée ne bloque pas réellement la loupe. C'est juste ne permettant pas de passer rapidement d'un texte à l'autre. mais affichant toujours une loupe.

Je veux désactiver la pression longue - pour éviter Problem que je fais face avec une loupe. Je veux le désactiver maintenant. le permettra à nouveau quand je serai en mesure de résoudre ce problème.

+2

voir ce http://stackoverflow.com/questions/866200/disable-magnifying-glass-in -uitextfield –

+0

Référez http://stackoverflow.com/questions/10640781/disable-magnifying-glass-in-uitextview – Venkat

+0

@Venkat réponse donnée dans ce fil est quelque chose qui échoue dans le processus d'approbation Apple. Son utilisation api privée. – Darshana

Répondre

1

Vous pouvez essayer de suivre pour désactiver uniquement construit en geste de presse à long

for (UIGestureRecognizer *recognizer in textView.gestureRecognizers) { 
    if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){ 
    recognizer.enabled = NO; 
    } 
} 

ou

méthode déléguée pour tous: -

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
return NO; 
} 
+0

Si je renverrai NON de shouldChangeCharactersInRange il ne me permettra pas d'éditer dans le champ de texte. – Darshana

+0

Si vous avez besoin d'une modification, désactivez le geste d'appui long uniquement par la première méthode. –

+0

La suppression du geste de pression longue fonctionne pour TextField mais pas pour UISearchbar. – Darshana

0

Une bonne et de façon propre de le faire est Vous pouvez créer une classe personnalisée pour UITextField et dans la classe personnalisée, vous pouvez remplacer le geste d'appui long qui provoque l'affichage de l'agrandissement. Cette classe personnalisée peut être utilisée dans tous les endroits où nous ne voulons pas afficher la vue d'agrandissement pour le champ de test. Il suffit d'utiliser la classe ci-dessous à la place de la classe UITextField

class CustomTextView: UITextView { 

    override func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { 
     if (gestureRecognizer.isKindOfClass(UILongPressGestureRecognizer)) { 
      gestureRecognizer.enabled = false; 
     } 
     super.addGestureRecognizer(gestureRecognizer) 
     return 
    } 
} 
2

@Neeraj réponse à Swift 4:

class CustomTextView: UITextView { 

    override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) { 

    if gestureRecognizer.isKind(of: UILongPressGestureRecognizer.self) { 
       gestureRecognizer.isEnabled = false 
    } 
    return super.addGestureRecognizer(gestureRecognizer) 
    } 
}