При натисканні на текстове поле відображається клавіатура. Як приховати його, коли користувач натисне клавішу повернення?
При натисканні на текстове поле відображається клавіатура. Як приховати його, коли користувач натисне клавішу повернення?
Відповіді:
Спочатку зробіть свій делегат файлу для 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;
..
}
Це повинно бути все. Тепер, коли ви натискаєте слід.return
textFieldShouldReturn
Визначте цей клас, а потім встановіть своє текстове поле для використання класу, і це автоматизує всю клавіатуру приховування, коли натискання повернення автоматично натискається.
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
}
}
Тоді все, що вам потрібно зробити, - це встановити поля для використання класу: