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

Posted

技术标签:

【中文标题】如何让 iPhone 上的返回键使键盘消失?【英文标题】:How to make return key on iPhone make keyboard disappear? 【发布时间】:2011-05-31 15:57:40 【问题描述】:

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

【问题讨论】:

【参考方案1】:

首先,您需要在 View/ViewController 的头文件中遵守 UITextFieldDelegate 协议,如下所示:

@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

【讨论】:

您也可以通过单击文本字段,显示实用程序面板,单击连接检查器,将委托出口拖到视图控制器上来实现故事板中的委托。 你的 textFieldShouldReturn 方法在哪里实现?您需要将该类设置为 UITextField 的委托。委托回调只会从设置为委托的类中触发,并且如果该类已经实现了它。 你有没有设置 MyViewController 在它的标题中符合 UITextFieldDelegate ? 只要 myTextField 已正确分配且不为零。从技术上讲,如果它是 nil(没有崩溃)很好,但那不会做任何事情:) 如果我可以补充一下,如果你只是使用一个 overridden UITextField 类,比如 UIFloatLabelTextField,你仍然需要 yourTextField.delegate = self;! !!【参考方案2】:

像这样实现 UITextFieldDelegate 方法:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField

    [aTextField resignFirstResponder];
    return YES;

【讨论】:

【参考方案3】:

有关此主题的完整讨论,请参阅 Managing the Keyboard。

【讨论】:

【参考方案4】:

您的 UITextFields 应该有一个委托对象 (UITextFieldDelegate)。在您的委托中使用以下代码使键盘消失:

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

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

【讨论】:

嘿伙计,我已经完成了你上面所说的,但我仍然无法让键盘消失。你有什么想法?谢谢。 嘿,克里斯,现在一切都整理好了。谢谢。【参考方案5】:

给我做了几次试验,遇到了同样的问题,这对我有用:

检查您的拼写 -

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

我在textField 而不是textfield 上更正了我的,大写的“F”......和宾果游戏!成功了。。

【讨论】:

【参考方案6】:

当按下返回键时,调用:

[uitextfield resignFirstResponder];

【讨论】:

嘿Conor,应用程序如何知道何时按下返回键?谢谢。【参考方案7】:

经过相当多的时间寻找有意义的东西,这就是我整理出来的东西,它就像一个魅力。

.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

希望这会有所帮助!

【讨论】:

【参考方案8】:

设置 UITextField 的 Delegate 到你的 ViewController,在 File's Owner 和 UITextField 之间添加一个引用出口,然后实现这个方法:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 

   if (textField == yourTextField) 
   
      [textField resignFirstResponder]; 
   
   return NO;

【讨论】:

【参考方案9】:

添加这个而不是预定义的类

class ViewController: UIViewController, UITextFieldDelegate 

在键盘外点击时移除键盘

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

按下回车键时移除键盘

在 viewDidLoad() 中添加这一行

inputField 是使用的文本字段的名称。

self.inputField.delegate = self

并添加此功能

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

【讨论】:

【参考方案10】:

斯威夫特 2:

这就是做每一件事的方法!

使用Done 按钮或Touch outSide ,Next 关闭键盘以转到下一个输入。

首先在 StoryBoard 中将 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)

【讨论】:

Apple 明确不鼓励使用标签。您可以改用 IBOutletCollection【参考方案11】:

在swift中你应该委托UITextfieldDelegate,重要的是不要忘记它,在viewController中,比如:

class MyViewController: UITextfieldDelegate

     mytextfield.delegate = self

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

【讨论】:

【参考方案12】:

您可以在uiTextField中添加一个IBAction(相关事件是“Did End On Exit”),并且IBAction可以命名为hideKeyboard,

-(IBAction)hideKeyboard:(id)sender

    [uitextfield resignFirstResponder];

另外,您可以将它应用到其他文本字段或按钮,例如,您可以在视图中添加一个隐藏按钮,当您单击它以隐藏键盘时。

【讨论】:

【参考方案13】:

您可以尝试这个 UITextfield 子类,您可以设置文本条件以动态更改 UIReturnKey:https://github.com/codeinteractiveapps/OBReturnKeyTextField

【讨论】:

请解释您的答案并将链接中的相关部分复制到帖子中。【参考方案14】:

如果您想在警告框文本文件上书写时消失键盘

[[alertController.textFields objectAtIndex:1] resignFirstResponder];

【讨论】:

以上是关于如何让 iPhone 上的返回键使键盘消失?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:隐藏应用程序上的键盘输入背景或视图消失

如何更改 iPhone 键盘返回键的颜色? [复制]

利用键盘左右键使图像左右移动,上下键使图像的两个纹理可见度比例上下调整

如何手动启用或禁用键盘上的 Return 键?

iPhone UI 测试 - 如何访问键盘上的删除键

当用户按下键盘上的返回按钮时如何关闭键盘?