Як приховати клавіатуру, коли я натискаю клавішу повернення в полі UITextField?


148

При натисканні на текстове поле відображається клавіатура. Як приховати його, коли користувач натисне клавішу повернення?


13
Найприємніше про Stack Overflow - це те, що вже відповіли МНОГО питань, особливо простих. Тому, будь ласка, шукайте відповіді ПЕРШИЙ, перш ніж запитувати. Дивіться, це просто: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

Це підклас UITextfield, який динамічно змінює UIReturnKey відповідно до умови тексту / рядка: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Відповіді:


286

Спочатку зробіть свій делегат файлу для UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Потім додайте цей метод у свій код.

- (BOOL)textFieldShouldReturn:(UITextField *)textField {        
    [textField resignFirstResponder];
    return YES;
}

Також додайте self.textField.delegate = self;


1
Цікаво, чому <UITextFieldDelegate> не потрібен? Зазвичай у цьому випадку ви побачите попередження.
pixelfreak

7
якщо ви зробите свій делегат файлу за допомогою Interface Builder, тоді <UITextFieldDelegate> не потрібен у файлі .h ..
Saurabh

1
додавання <UITextFieldDelegate> у .h файл та встановлення делегата у viewdidload [yourTextField setDelegate: self]; завершимо це!
Umit Kaya

@Saurabh Що таке особливе у створеній VC?
Пол Бревчинський

62

У viewDidLoadзаяві:

[yourTextField setDelegate:self];

Потім включіть заміщення методу делегата:

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

6
+1 для setDelegate:нагадування. Однозначно раніше забув, і код не працював раніше.
піперчестер

2
Чи не повинно це бути textField, а не yourTextField під час передачі?
Клайв Джеффріс

- це спосіб сказати, що оголосити делегата свого textField
oscar castellon

1
<UITextFieldDelegate> повинен бути у файлі .h, інакше з’явиться попередження!
Umit Kaya

22

Спробуйте це в Swift ,

Крок 1: Встановіть делегата як власнийtextField

textField.delegate = self

Крок 2: Додайте цей UITextFieldDelegate під декларацію класу,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

Швидко зробіть це так:
По-перше, у вашій 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
}

1
Другий крок не потрібен, якщо ви встановите делегата в ІБ.
hris.to

З'являється (у поточних версіях Swift) перед "textField" має бути підкреслення:
Брайс Сандлунд

2

Спробуйте це,

[textField setDelegate: self];

Потім у методі delegate textField

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

це не найкраща практика для цього.
orafaelreis

потребує UITextFieldDelegate у визначенні інтерфейсу.
Альп Альтунель

@AlpAltunel: Дякую за коментар, це було 4 роки тому.
Vineesh TP

1

встановіть делегата UITextFieldі перейдіть textFieldShouldReturnметод, в цьому методі просто напишіть наступні два рядки:

[textField resignFirstResponder];
return YES;

Це воно. Перш ніж писати код, не забудьте встановити делегата а UITextFieldта встановити тип клавіші повернення на "Готово" у вікні властивостей. (Команда + shift + I).


1

Ви можете підключити "Первинну дію" (правою кнопкою миші на UITextField) за допомогою IBAction, і ви можете піти у відставку першого відповідача (без делегування). Приклад (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Бажаний спосіб, якщо використовуються розкадровки.
lal

1

Швидкий 4

Встановіть делегата 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)
    }
}

як би ви попрацювали з тим, щоб бажаючі користувачі переходили на "вкладку" до наступного текстового поля натисканням клавіші повернення, до останнього, а потім він подає у відставку? Також у SwiftUI.
Learn2Code

@ Learn2Code зробити менеджера, збирати текстові поля та ланцюжок, останнє запустить функцію фінішу.
dimpiax

1

Якщо ви хочете приховати клавіатуру для конкретного використання клавіатури. [self.view resignFirstResponder]; Якщо ви хочете приховати будь-яку клавіатуру від використання режиму перегляду[self.view endEditing:true];



0

Гаразд, я думаю, що для початківців речі можуть бути дещо заплутаними. Я думаю, що правильна відповідь - це поєднання всього вищесказаного, принаймні у 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


0

Визначте цей клас, а потім встановіть своє текстове поле для використання класу, і це автоматизує всю клавіатуру приховування, коли натискання повернення автоматично натискається.

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
    }

}

Тоді все, що вам потрібно зробити, - це встановити поля для використання класу:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.