IPhone, как получить текст UITextField при наборе текста?
Я пытаюсь показать изменения, внесенные в UITextField
на отдельный UILabel
. Есть ли способ захватить полный текст UITextField
после каждого символа, который вводит пользователь? В настоящее время я использую этот метод, но он не фиксирует последний символ, введенный пользователем.
Я знаю, что UITextView
имеет метод didChange, но я не смог найти этот метод для UITextField
.
//does not capture the last character
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self updateTextLabelsWithText: textField.text];
return YES;
}
Как я могу извлечь текст из UITextField после ввода каждого символа?
Спасибо!
Ответы
Ответ 1
- Сначала добавьте один
UITextField
и UILabel
в раскадровку /nib
- Теперь назначьте
IBOutlet
для UILabel
(здесь я использовал myLabel)
- Назначить
UITextFieldDelegate
владельцу файла, также реализовать тот же делегат в файле .h
-
Используйте эти строки кода:
- (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];
}
Надеюсь, что это поможет.
Ответ 2
Просто обработайте событие "Редактирование изменено"
[textField addTarget:self
action:@selector(editingChanged:)
forControlEvents:UIControlEventEditingChanged];
и селектор:
-(void) editingChanged:(id)sender {
// your code
}
Вы можете сделать это вручную или с помощью раскадровки CTRL-Перетаскивая событие "Редактирование изменено" Sent на ваш .h, создав для вас метод редактированияChanged.
Ответ 3
В 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
}
}
Надеюсь, это поможет вам быстрыми пионерами.
Ответ 4
Swift с addTarget Swift 2.0 +
titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)
И реализуем selector
func textFieldTyping(textField:UITextField)
{
//Typing
}
Ответ 5
В Swift 3.0:
Некоторые из этих решений были за одним символом, или для более ранних версий Swift и Obj-C. Вот что я использую для Swift 3.0
В классе я объявил местозаполнитель для хранения текста.
var tempName = ""
В ViewDidLoad я использовал:
nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)
Затем я произвел функцию:
func typingName(textField:UITextField){
if let typedText = textField.text {
tempName = typedText
print(tempName)
}
}
Ответ 6
Свифт 3. 0+: Мне это очень понравилось.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
self.yourLabel.text = "\(textField.text ?? "")\(string)"
return true
}
Ответ 7
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!
}
}
}
Ответ 8
Может кто-нибудь поделиться полным кодом в качестве примера для этого новичка (меня)?