如何在按return键时以编程方式关闭键盘iOS
我以编程方式创建了一个如何在按return键时以编程方式关闭键盘iOS,ios,keyboard,uitextfield,Ios,Keyboard,Uitextfield,我以编程方式创建了一个UITextField,使UITextField成为viewController的属性。我需要用返回键和触摸屏来关闭键盘。我可以让触摸屏关闭,但按回车键不起作用 我已经了解了如何使用故事板,以及如何直接分配和初始化UITextField对象,而不将其创建为属性。可能做什么 H 添加UITextField的委托方法,如下所示: @interface MyController : UIViewController <UITextFieldDelegate> 首先,
UITextField
,使UITextField
成为viewController的属性。我需要用返回键和触摸屏来关闭键盘。我可以让触摸屏关闭,但按回车键不起作用
我已经了解了如何使用故事板,以及如何直接分配和初始化UITextField
对象,而不将其创建为属性。可能做什么
H
添加
UITextField
的委托方法,如下所示:
@interface MyController : UIViewController <UITextFieldDelegate>
首先,您需要在.h文件中添加textfield delegete。如果不申报
(BOOL)textField应返回:(UITextField*)textField
此方法未调用。因此,首先添加委托并将键盘隐藏代码写入该方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
试试这个..试着了解iOS视图层次结构中的第一响应者是什么。当您触摸文本字段内部(或以编程方式将消息传递给文本字段becomeFirstResponder)时,文本字段(或FirstResponder)变为活动状态,它将显示键盘。因此,要将您的文本字段从第一响应者中删除,您应该将消息
resignFirstResponder
传递给它
[textField resignFirstResponder];
要在其返回按钮上隐藏键盘,您应该实现其委托方法textFieldShouldReturn:
,并传递resignFirstResponder
消息
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
添加委托:UITextFieldDelegate
@interface ViewController : UIViewController <UITextFieldDelegate>
简单的方法是将
UITextField
的委托连接到self(self.mytestField.delegate=self
),并使用[textField resignFirstResponder]关闭方法textField shouldlreturn
)中的键盘代码>
另一种关闭键盘的方法如下:
目标-C
[self.view endEditing:YES];
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// no need to cast
[view resignFirstResponder];
}
}
Swift:
self.view.endEditing(true)
self.view.endEditing(true)
[self.view endEditing:YES];
放置[自视图编辑:是]
您希望关闭键盘的位置(按钮事件、触摸事件等)。以下是我在触摸背景或返回后将其关闭的步骤。我必须在viewDidLoad中添加delegate=self,然后在.m文件中添加delegate方法
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
self.username.delegate = self;
[self.username resignFirstResponder];
[self.view addSubview:self.username];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
@end
.h
#进口
@界面ViewController:UIViewController
@属性(强,原子)UITextField*用户名;
@结束
M
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
self.view.backgroundColor=[UIColor blueColor];
self.username=[[UITextField alloc]initWithFrame:CGRectMake(100,25,80,20)];
self.username.placeholder=@“输入您的用户名”;
self.username.backgroundColor=[UIColor whiteColor];
self.username.borderStyle=UITextBorderStyleRoundedRect;
if(self.username.placeholder!=nil){
self.username.clearsOnBeginEditing=否;
}
self.username.delegate=self;
[self.username辞职FirstResponder];
[self.view addSubview:self.username];
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(BOOL)textField应该开始编辑:(UITextField*)textField
{
返回YES;
}
-(BOOL)textField应返回:(UITextField*)textField
{
[textField resignFirstResponder];
返回YES;
}
@结束
//通过触摸视图中的背景隐藏键盘
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
对于ViewController
中的一组UITextView
s:
Swift 3.0
for view in view.subviews {
if view is UITextField {
view.resignFirstResponder()
}
}
目标-C
[self.view endEditing:YES];
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// no need to cast
[view resignFirstResponder];
}
}
我知道其他人已经回答了这个问题,但我发现另一篇文章也没有涉及背景事件——tableview或scrollview
以下是我在代码中使用的内容。它就像一个符咒
在yourviewcontroller.h中添加:
@property(非原子)UITapGestureRecognizer*tapRecognizer代码>
现在在.m文件中,将其添加到ViewDidLoad函数:
- (void)viewDidLoad {
[super viewDidLoad];
//Keyboard stuff
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapRecognizer];
}
另外,在.m文件中添加此函数:
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
在应用程序委托中,您可以编写
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.window endEditing:YES];
}
用这种方法,你就不会写太多的代码
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UITextField class]]) {
[obj resignFirstResponder];
}
}];
}
当您在屏幕中使用多个文本字段时
使用这种方法,您不必每次都提到textfield,就像
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
由于标签上只显示iOS i将发布Swift 1.2和iOS 8.4的答案,请将这些添加到视图控制器Swift类中:
// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder()
return true
}
// MARK: -
//标记:-触摸其他位置时关闭键盘
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
self.view.endEditing(true)
}
//标记:-按return键时关闭键盘
func textField应该返回(textField:UITextField!)->Bool{
textField.resignFirstResponder()辞职
返回真值
}
//标记:-
另外,不要忘记在类声明中添加UITextFieldDelegate,并将文本字段委托设置为self(视图)。Swift 2:
self.view.endEditing(true)
self.view.endEditing(true)
[self.view endEditing:YES];
这就是我们所做的一切
用Done
按钮关闭键盘,或触摸外部
,Next
进入下一个输入
首先将脚本中的文本字段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)
}
只需在swift中使用此选项即可关闭键盘:
UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
[[UIApplication sharedApplication].keyWindow endEditing:YES];
Swift 3
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
要在键盘弹出后关闭键盘,有两种情况
当UITextField位于UIScrollView内部时
当UITextField位于UIScrollView外部时
2.当UITextField位于UIScrollView之外时
重写UIViewController子类中的方法
您还必须为所有UITextView添加代理
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
在滚动视图中,点击外部不会触发任何事件,因此在这种情况下使用点击手势识别器,
拖放滚动视图的uitappostation,并为其创建iAction
要创建iAction,请按住ctrl键并单击UITap手势,然后将其拖动到viewcontroller的.h文件中
self.view.endEditing(true)
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
[self.view endEditing:YES];
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
[[UIApplication sharedApplication].keyWindow endEditing:YES];