2016-05-11 2 views
-3

Есть ли способ автоматически скрыть клавиатуру в swift после ввода четырех символов? У меня на самом деле есть код, который скрывает клавиатуру, но пользователь должен щелкнуть в любом месте экрана. Вот код:Скрыть клавиатуру автоматически в swift

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    self.view.endEditing(true) 
} 

Заранее благодарен!

+0

См. Http://stackoverflow.com/questions/28394933/how-do-i-check-when-a-uitextfield-changes. Метод проверяет текущую длину. Когда это правильный размер, отпустите клавиатуру. – rmaddy

+0

Возможный дубликат [Как скрыть клавиатуру быстрым нажатием клавиши возврата?] (Http://stackoverflow.com/questions/24180954/how-to-hide-keyboard-in-swift-on-pressing-return-key) –

+0

@AbhinandanPratap Нет, это не дубликат, так как OP не спрашивает, как отклонить клавиатуру, когда нажата кнопка возврата. – rmaddy

ответ

-2

Вы должны использовать TextField делегат shouldChangeCharactersInRange что-то вроде,

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 


if (textField.text.length == 4) { 

    [textField resignFirstResponder]; 
} 

return YES; 
} 

В Swift,

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 



     if textField.text?.characters.count == 4 { 

      textField.resignFirstResponder() 

     } 
    return true 
} 

Надеется, что это поможет :)

+0

Строка не имеет имени с именем length. – 123FLO321

+0

Быстрое использование: textField.text? .characters.count или NSString (строка: textField.text!). Length – 123FLO321

+0

OP кодируется в Swift, а не в Objective-C. – ozgur

-1

Это работает для меня:

// Outlet to textfield, editing changed 
@IBAction func textFieldEditingChanged(sender: UITextField) { 
    if sender.text?.characters.count == 4 { 
     view.endEditing(true) 
    } 
    // Optional if you don't want the user to paste in more than 4 characters 
    else if sender.text?.characters.count > 4 { 
     sender.text = nil 
    } 
} 

Я также рекомендую вам настройку

textField.clearsOnBeginEditing = true 

так текстовое поле очищается, когда пользователь нажимает на нее еще раз.

+0

Это не удастся, если пользователь вставляет более четырех символов в текстовое поле. – rmaddy

+0

@rmaddy Я не знаю, если это большое дело или нет. В любом случае я добавил дополнительное исправление. – 123FLO321

0

Если я получил ваш вопрос правильно, Рассмотрим ниже примере кода:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var txtF: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     txtF.delegate = self 
     txtF.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged) 
    } 


    func textFieldDidChange(textField: UITextField) { 

     if textField == txtF { 

      if textField.text?.characters.count == 4 { 

       self.txtF.resignFirstResponder() 
      } 
     } 
    } 

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

     if textField == txtF { 

      if textField.text?.characters.count > 3 { 

       self.txtF.resignFirstResponder() 
       return false 
      } else { 

       return true 
      } 
     } else { 

      return true 
     } 
    } 
} 

С кода выше клавиатуры скрою, когда TextField имеют 4-х символов и после этого, если пользователь снова нажмите на TextField клавиатуре появится быть пользователь не в состоянии ввести текст в textField, и клавиатура снова скроется.

Результата будет:

enter image description here

Надеется, что это поможет.

+2

почему так сложно – 123FLO321

+0

Я так не думаю. –

+0

Это не удается, если пользователь вставляет более четырех символов в текстовое поле. – rmaddy

0

Вот простейший способ скрыть клавиатуру или цифровую панель. Прежде всего, необходимо кнопку, и вы должны сделать его размер screen.Send его к задней части сцены и соединить его с кодом IBAction.Then вы должны выглядеть следующим образом:

@IBAction func HideKeyboard(sender: AnyObject) { 
    YourKeyboardHere.resignFirstResponder() 
} 

Это должно работа для всех типов клавиатуры.

Смежные вопросы