question assez triviale, je sais. Mais je ne trouve rien en ligne.
Je dois empêcher l'utilisateur de pouvoir modifier le texte à l'intérieur d'un champ de texte. Pour que lorsque le clic sur le texte, un clavier n'apparaisse pas.
Des idées?
Une solution programmatique ou si cela est possible grâce aux storyboards serait génial.
Essaye ça:
Swift 2.:
textField.userInteractionEnabled = false
Swift 3.:
textField.isUserInteractionEnabled = false
Ou dans le storyboard, décochez la case "Interaction utilisateur activée".
Une autre solution, déclarez votre contrôleur comme UITextFieldDelegate, implémentez ce rappel:
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
if textField == myTextField {
return false; //do not show keyboard nor cursor
}
return true
}
Dans le storyboard, vous avez deux choix:
La différence entre ces choix est:
l'apparence de UITextfild à afficher à l'écran.
Dans le code:
textfield.enable = false
textfield.userInteractionEnabled = NO
Mise à jour pour Swift
textField.isEnabled = false
textfield.isUserInteractionEnabled = false
J'aime le faire comme autrefois. Vous utilisez simplement une classe UITextField personnalisée comme celle-ci:
//
// ReadOnlyTextField.Swift
// MediFormulas
//
// Created by Oscar Rodriguez on 6/21/17.
// Copyright © 2017 Nica Code. All rights reserved.
//
import UIKit
class ReadOnlyTextField: UITextField {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
override init(frame: CGRect) {
super.init(frame: frame)
// Avoid keyboard to show up
self.inputView = UIView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Avoid keyboard to show up
self.inputView = UIView()
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
// Avoid cut and paste option show up
if (action == #selector(self.cut(_:))) {
return false
} else if (action == #selector(self.paste(_:))) {
return false
}
return super.canPerformAction(action, withSender: sender)
}
}
vous pouvez utiliser UILabel
à la place si vous ne voulez pas que l'utilisateur puisse modifier quoi que ce soit dans votre UITextField
Une solution programmatique consisterait à utiliser la propriété enabled
:
yourTextField.enabled = false
Une façon de le faire dans un story-board:
Décochez la case Activé dans les propriétés de votre UITextField
Vous devez utiliser "isEditable" au lieu de "userInteractionEnabled", car si UITextfield a plus de lignes que celles que vous voyez et qui défile. "UserInteractionEnabled" ne fonctionnera pas pour le défilement.
Swift 4
textView.isEditable = false
Swift 4.2/Xcode 10.1:
Décochez simplement le comportement Activé dans votre storyboard -> inspecteur d'attributs.