如何使iPhone上的返回键使键盘消失?


108

我有两个UITextFields密码(例如,用户名和密码),但是按键盘上的回车键时无法摆脱键盘。我怎样才能做到这一点?

Answers:


242

首先,您需要UITextFieldDelegate像这样在View / ViewController的头文件中遵守协议:

@interface YourViewController : UIViewController <UITextFieldDelegate>

然后,在您的.m文件中,您需要实现以下UITextFieldDelegate协议方法:

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

    return YES;
}

[textField resignFirstResponder]; 确保关闭键盘。

在.m中初始化文本字段后,请确保将视图/视图控制器设置为UITextField的委托:

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
您还可以通过以下方式在情节提要中实现委托:单击文本字段,显示“实用工具”面板,单击“连接检查器”,将委托出口拖到视图控制器上。
guptron

1
您的textFieldShouldReturn方法在哪里实现?您需要将该类设置为UITextField的委托。委托回调只会从设置为委托的类中触发,如果该类已实现它。
2013年

1
您是否已设置MyViewController使其标头符合UITextFieldDelegate?
2013年

1
只要myTextField已正确分配并且不是nil。从技术上讲,如果它为零(没有崩溃),那很好,但是那什么也没做:)
Sid

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];
}

到目前为止应该可以工作...


嗨,老兄,我已经完成了您上面说的内容,但仍然无法使键盘消失。你有什么想法?谢谢。
K.Honda 2011年

嘿,克里斯,现在都整理好了。谢谢。
K.Honda 2011年

6

花了我几次试验,有同样的问题,这对我有用:

检查您的拼写-

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

我改了我的textField而不是textfield,大写了“ F” ...和宾果游戏!有效..



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的Delegate设置为ViewController,在File的Owner和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是使用的textField的名称。

self.inputField.delegate = self

并添加此功能

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

2

斯威夫特2:

这是每件事要做的事!

关闭键盘Done按钮或者Touch outSideNext以转到下一个输入。

在StoryBoard中首先将TextFiled更改Return KeyNext

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,2015年

2

快速地,您应该委派UITextfieldDelegate,在viewController中,重要的是不要忘记它,例如:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}

0

您可以将IBAction添加到uiTextField(释放事件为“退出时结束”),并且IBAction可以命名为hideKeyboard,

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

此外,您还可以将其应用于其他文本字段或按钮,例如,可以在单击视图以隐藏键盘时在视图中添加隐藏的按钮。



0

如果要在警报框textfileds上书写时消失键盘

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.