Как заставить клавишу возврата на iPhone заставить исчезнуть клавиатуру?

108

У меня их два UITextFields(например, имя пользователя и пароль), но я не могу избавиться от клавиатуры при нажатии клавиши возврата на клавиатуре. Как я могу это сделать?

К. Хонда
источник

Ответы:

242

Сначала вам нужно соответствовать UITextFieldDelegateпротоколу в заголовочном файле View / ViewController следующим образом:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Затем в вашем .m файле вам необходимо реализовать следующий UITextFieldDelegateметод протокола:

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

    return YES;
}

[textField resignFirstResponder]; Убедитесь, что клавиатура закрыта.

Убедитесь, что вы устанавливаете свой view / viewcontroller как делегат UITextField после инициализации текстового поля в .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on
Sid
источник
7
Вы также можете реализовать делегата в раскадровке, щелкнув текстовое поле, отобразив панель Utilities, щелкнув Connections Inspector, перетащив выход делегата на контроллер представления.
guptron
1
Где реализован ваш метод textFieldShouldReturn? Вам нужно установить этот класс как делегат UITextField. Обратный вызов делегата будет запускаться только из класса, который установлен как делегат, и если класс его реализовал.
Сид
1
Вы установили MyViewController в соответствии с UITextFieldDelegate в его заголовке?
Сид
1
Пока myTextField был выделен правильно и не равен нулю. Технически это нормально, если оно равно нулю (без сбоев), но тогда это ничего не даст :)
Сид
1
И если я могу добавить, не имеет значения, используете ли вы просто переопределенный класс UITextField, такой как UIFloatLabelTextField, вам ВСЕ ЕЩЕ НУЖЕН yourTextField.delegate = self; !!!
Gellie Ann
19

Реализуйте метод UITextFieldDelegate следующим образом:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}
Ник Уивер
источник
6

Ваш UITextFields должен иметь объект делегата (UITextFieldDelegate). Используйте следующий код в своем делегате, чтобы клавиатура исчезла:

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

Должно работать пока ...

cschwarz
источник
Привет, приятель, я сделал то, что ты сказал выше, но все еще не могу заставить клавиатуру исчезнуть. У тебя есть идеи? Спасибо.
K.Honda 01
Привет, Крис, теперь все в порядке. Спасибо.
K.Honda 01
6

Взял у меня пару испытаний, у меня была такая же проблема, это сработало для меня:

Проверьте правописание на -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Я исправил свое «на», textFieldвместо textfield«F» ... и бинго !! это сработало..

Эма
источник
4

При нажатии клавиши возврата вызовите:

[uitextfield resignFirstResponder];
Конор Тейлор
источник
Привет, Конор, как приложение узнает, когда нажата клавиша возврата? Спасибо.
K.Honda 01
3

После довольно долгого поиска чего-то, что имеет смысл, я собрал это воедино, и это сработало как шарм.

.час

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.m

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

Надеюсь это поможет!

user2904476
источник
3

Установите делегата UITextField на свой ViewController, добавьте ссылку для выхода между владельцем файла и UITextField, затем реализуйте этот метод:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}
Avinash651
источник
3

Добавьте это вместо предопределенного класса

class ViewController: UIViewController, UITextFieldDelegate {

Чтобы удалить клавиатуру при нажатии вне клавиатуры

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

и убрать клавиатуру при нажатии Enter

добавьте эту строку в viewDidLoad ()

inputField - это имя используемого текстового поля.

self.inputField.delegate = self

и добавьте эту функцию

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }
Али Кахут
источник
2

Swift 2:

это то, что сделал, чтобы сделать все!

закрыть клавиатуру с помощью Doneкнопки или Touch outSide, Nextчтобы перейти к следующему вводу.

Первое изменение TextFiled Return KeyЧтобы Nextв раскадровке.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}
Mojtabye
источник
Apple категорически не рекомендует использовать теги. Вместо этого вы можете использовать IBOutletCollection
Antzi
2

быстро вы должны делегировать UITextfieldDelegate , важно не забывать об этом в viewController, например:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}
Эдуардо Оливерос
источник
0

Вы можете добавить IBAction к uiTextField (событие выпуска - «Did End On Exit»), а IBAction может называть hideKeyboard,

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

Кроме того, вы можете применить его к другим текстовым полям или кнопкам, например, вы можете добавить скрытую кнопку в представление, когда вы щелкаете по ней, чтобы скрыть клавиатуру.

慭 慭 流 觞
источник
0

Вы можете попробовать этот подкласс UITextfield, в котором вы можете установить условие для текста для динамического изменения UIReturnKey:
https://github.com/codeinteractiveapps/OBReturnKeyTextField

CodeInteractive
источник
Пожалуйста, объясните свой ответ и скопируйте соответствующую часть из ссылки на сообщение.
Рохит Гупта
0

Если вы хотите, чтобы клавиатура исчезла при написании текстовых файлов в окне предупреждения

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
DURGESH
источник