J'essaie de montrer les modifications apportées à une UITextField
sur une UILabel
séparée. Existe-t-il un moyen de capturer le texte intégral de la UITextField
après chaque caractère saisi par l'utilisateur? Actuellement, j'utilise cette méthode, mais elle ne capture pas le dernier caractère saisi par l'utilisateur.
Je sais que UITextView
a la méthode "didChange", mais je ne pouvais pas trouver cette méthode pour un UITextField
.
//does not capture the last character
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self updateTextLabelsWithText: textField.text];
return YES;
}
Comment puis-je extraire du texte dans UITextField après chaque caractère entré?
Je vous remercie!
UITextField
et UILabel
au storyboard/nibIBOutlet
pour UILabel
(Ici j'ai utilisé myLabel )UITextFieldDelegate
au propriétaire du fichier, implémentez également le même délégué dans un fichier .hUtilisez ces lignes de code:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
[self updateTextLabelsWithText: newString];
return YES;
}
-(void)updateTextLabelsWithText:(NSString *)string
{
[myLabel setText:string];
}
J'espère que cela t'aides.
Il suffit de gérer l'événement "Modification modifiée"
[textField addTarget:self
action:@selector(editingChanged:)
forControlEvents:UIControlEventEditingChanged];
et le sélecteur:
-(void) editingChanged:(id)sender {
// your code
}
Vous pouvez le faire manuellement ou avec le storyboard en faisant CTRL-Glisser l'événement envoyé "Modification modifiée" vers votre fichier .h, en créant la méthode éditionChanged pour vous.
Dans Swift 2.0+
class CheckInViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
yourTextField.delegate = self
}
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
var updatedTextString : NSString = textField.text as NSString
updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string)
self.methodYouWantToCallWithUpdatedString(updatedTextString)
return true
}
}
J'espère que cela vous aide pionniers rapides
Swift avec addTarget Swift 2.0+
titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)
Et implémenter selector
func textFieldTyping(textField:UITextField)
{
//Typing
}
Dans Swift 3.0:
Certaines de ces solutions avaient un caractère de retard ou des versions antérieures de Swift et Obj-C. Voici ce que j'utilise pour Swift 3.0
Dans la classe, j'ai déclaré un espace réservé pour stocker le texte.
var tempName = ""
Dans ViewDidLoad, j'ai utilisé:
nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)
Puis j'ai créé une fonction appelée:
func typingName(textField:UITextField){
if let typedText = textField.text {
tempName = typedText
print(tempName)
}
}
Swift 3.0+: Cela a très bien fonctionné pour moi.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
self.yourLabel.text = "\(textField.text ?? "")\(string)"
return true
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == yourTextFieldOutletName
{
if yourTextFieldOutletName.isEmpty == false
{
youtlabelname.text = yourTextFieldOutletName.text!
}
}
return true
}
func textViewDidEndEditing(_ textView: UITextView) {
if textField == yourTextFieldOutletName
{
if yourTextFieldOutletName.isEmpty == false
{
youtlabelname.text = yourTextFieldOutletName.text!
}
}
}