Як змусити клавішу повернення на iPhone змусити клавіатуру зникнути?


108

У мене є два UITextFields(наприклад, ім’я користувача та пароль), але я не можу позбутися клавіатури при натисканні клавіші повернення на клавіатурі. Як я можу це зробити?

Відповіді:


242

Спочатку потрібно відповідати UITextFieldDelegateПротоколу у файлі заголовка View / ViewController таким чином:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Потім у свій .m файл потрібно реалізувати такий UITextFieldDelegateметод протоколу:

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

    return YES;
}

[textField resignFirstResponder]; гарантує, що клавіатура відхилена.

Переконайтеся, що ви встановили свій перегляд / 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

7
Ви також можете реалізувати делегата в дошці повідомлень, натиснувши на текстове поле, покажіть панель «Утиліти», натисніть «Інспектор підключень», перетягніть розетку делегата на контролер перегляду.
Гуптрон

1
Де реалізований ваш метод textFieldShouldReturn? Потрібно встановити цей клас як делегат UITextField. Зворотний виклик делегата запускатиметься лише з класу, який встановлений для делегата, і якщо клас його реалізував.
Сид

1
Чи встановили ви MyViewController відповідно до UITextFieldDelegate у своєму заголовку?
Сід

1
До тих пір, поки myTextField розподілено правильно і не буде нульовим. Технічно, це добре , якщо це нуль (немає аварії) , але тоді не буде нічого робити :)
Sid

1
І якщо я можу додати, це не має значення, якщо ви просто використовуєте перекритий клас UITextField, такий як UIFloatLabelTextField, вам НЕ ПОТРІБНО вашTextField.delegate = self; !!!
Геллі Енн

19

Реалізуйте метод UITextFieldDelegate таким чином:

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


6

Ваші UITextFields повинні мати об’єкт-делегат (UITextFieldDelegate). Використовуйте такий код у своєму делегаті, щоб зникнути з клавіатури:

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

Має працювати поки що ...


Ей, приятелю, я зробив те, що ви сказали вище, але все ще не можу змусити клавіатуру зникнути. У вас є ідеї? Дякую.
К.Хонда

Гей, Кріс, зараз усе сортовано. Дякую.
К.Хонда

6

Взяв у мене пару випробувань, був той самий випуск, це спрацювало для мене:

Перевірте написання на -

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

Я виправив шахту на, textFieldзамість великої textfieldлітери "F" ... і бінго !! це спрацювало..


4

Після натискання клавіші повернення зателефонуйте:

[uitextfield resignFirstResponder];

Привіт Коноре, як програма знає, коли натискається клавіша повернення? Дякую.
К.Хонда

3

Після зовсім небагато часу, коли вишукуєте щось, що має сенс, це те, що я зібрав, і це спрацювало як шарм.

.h

//
//  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

Сподіваюся, це допомагає!


3

Встановіть Делегат UITextField у свій ViewController, додайте референтну розетку між власником файлу та UITextField, а потім застосуйте цей метод:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}

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

Швидкий 2:

це те, що робиться для кожної справи!

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

Перша зміна TextFiled Return KeyTo Nextв StoryBoard.

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)
}

Використання тегів явно не відволікає яблуко. Ви можете скористатися 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 може іменувати hidKeyboard,

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

Крім того, ви можете застосувати його до інших текстових полів або кнопок, наприклад, ви можете додати до перегляду приховану кнопку, натиснувши її, щоб приховати клавіатуру.



0

Якщо ви хочете зникнути з клавіатури під час написання текстових файлів у поле сповіщення

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