При натисканні на текстове поле відображається клавіатура. Як приховати його, коли користувач натисне клавішу повернення?
При натисканні на текстове поле відображається клавіатура. Як приховати його, коли користувач натисне клавішу повернення?
Відповіді:
Спочатку зробіть свій делегат файлу для UITextField
@interface MYLoginViewController () <UITextFieldDelegate>
@end
Потім додайте цей метод у свій код.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
Також додайте self.textField.delegate = self;
У viewDidLoadзаяві:
[yourTextField setDelegate:self];
Потім включіть заміщення методу делегата:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
setDelegate:нагадування. Однозначно раніше забув, і код не працював раніше.
Спробуйте це в Swift ,
Крок 1: Встановіть делегата як власнийtextField
textField.delegate = self
Крок 2: Додайте цей UITextFieldDelegate під декларацію класу,
extension YourClassName: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Швидко зробіть це так:
По-перше, у вашій ViewControllerреалізації цього, UITextFieldDelegate
наприклад.
class MyViewController: UIViewController, UITextFieldDelegate {
....
}
Тепер додайте делегата до параметра, TextFieldу якому ви хочете відмовитись від клавіатури, коли натискання клавіші return повернеться як у viewDidLoadнижченаведеному способі, так і там, де ви ініціалізуєте його. Наприклад, наприклад.
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
}
Тепер додайте цей метод.
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Спробуйте це,
[textField setDelegate: self];
Потім у методі delegate textField
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
встановіть делегата UITextFieldі перейдіть textFieldShouldReturnметод, в цьому методі просто напишіть наступні два рядки:
[textField resignFirstResponder];
return YES;
Це воно. Перш ніж писати код, не забудьте встановити делегата а UITextFieldта встановити тип клавіші повернення на "Готово" у вікні властивостей. (Команда + shift + I).
Ви можете підключити "Первинну дію" (правою кнопкою миші на UITextField) за допомогою IBAction, і ви можете піти у відставку першого відповідача (без делегування). Приклад (Swift 4):
@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
sender.resignFirstResponder()
...
}
Встановіть делегата UITextFieldконтролера перегляду field.delegate = self, а потім:
extension ViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// don't force `endEditing` if you want to be asked for resigning
// also return real flow value, not strict, like: true / false
return textField.endEditing(false)
}
}
Гаразд, я думаю, що для початківців речі можуть бути дещо заплутаними. Я думаю, що правильна відповідь - це поєднання всього вищесказаного, принаймні у Swift4.
Створіть розширення або використовуйте ViewController, у якому ви хочете використовувати це, але не забудьте застосувати UITextFieldDelegate. З метою повторного використання мені було легше використовувати розширення:
extension UIViewController : UITextFieldDelegate {
...
}
але альтернатива також працює:
class MyViewController: UIViewController {
...
}
Додайте метод textFieldShouldReturn (залежно від попереднього параметра, або в розширенні, або в ViewController)
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
return textField.endEditing(false)
}
У своєму методі viewDidLoad встановіть делегата текстового поля на "self"
@IBOutlet weak var myTextField: UITextField!
...
override func viewDidLoad() {
..
myTextField.delegte = self;
..
}
Це повинно бути все. Тепер, коли ви натискаєте слід.returntextFieldShouldReturn
Визначте цей клас, а потім встановіть своє текстове поле для використання класу, і це автоматизує всю клавіатуру приховування, коли натискання повернення автоматично натискається.
class TextFieldWithReturn: UITextField, UITextFieldDelegate
{
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.delegate = self
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField.resignFirstResponder()
return true
}
}
Тоді все, що вам потрібно зробити, - це встановити поля для використання класу: