如何让 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 上的返回键使键盘消失?的主要内容,如果未能解决你的问题,请参考以下文章