无法关闭文本字段上的键盘

Posted

技术标签:

【中文标题】无法关闭文本字段上的键盘【英文标题】:Not able to dismiss the keyboard on textfield 【发布时间】:2017-04-15 12:33:13 【问题描述】:

我在故事板上的视图控制器结构。

主视图 -> 滚动视图 -> 视图 -> 3 个文本字段(在主视图上添加一个滚动视图,再次添加一个视图,然后添加 3 个文本字段)。

在第一个文本字段(日期),打开日期选择器。

在第二个文本字段(城市)上,为城市列表打开新的视图控制器,选择城市后,它将为工作区打开新的视图控制器。选择工作区后将返回主视图控制器,所选城市和工作区显示在第二个文本(城市)字段中。

在第三个文本字段(客户)上,打开普通键盘。

它工作正常,但问题是如果我点击 customer textfield,它会在我点击 city textfield 的同时打开键盘,而不是打开 城市列表视图控制器,但键盘没有关闭。 城市列表视图控制器上也会显示键盘。

我已经尝试过下面的想法。

我已经在尝试使用 [self.view endEditing:YES] 和 resignFirstResponder。但没有得到任何成功的结果。

我已经将标签分配给 textfield 并且还在 viewDidLoad() 方法中设置了委托。 我还从情节提要中分配了代表。

self.cityOrAreaTXTFld.delegate = self;
self.selectCustTXTFld.delegate = self;

self.dateTXTFld.tag = 1;
self.cityOrAreaTXTFld.tag = 2;
self.selectCustTXTFld.tag = 3;

我的 textFieldDidBeginEditing() 方法

- (void)textFieldDidBeginEditing:(UITextField *)textField






if(textField.tag==1)
NSLog(@"Code to open date picker");




else if (textField.tag==2)

    [self.view endEditing:YES];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *CityPEVC = [storyboard instantiateViewControllerWithIdentifier:@"CityListViewController"];

   [self.navigationController pushViewController:CityPEVC animated:YES];


   return;



else if(textField.tag==3)
 
    [_dateTXTFld resignFirstResponder];
    [_cityOrAreaTXTFld resignFirstResponder];


我有一个解决方案

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField



if(textField.tag == 2)


    [_dateTXTFld resignFirstResponder];
    [_selectCustTXTFld resignFirstResponder];

    return YES;

else
    return YES;



在此解决方案中,如果键盘未打开不是问题,但如果在 主视图控制器 上打开了任何键盘并且第一次点击 city textfield 它将关闭键盘(未打开城市列表 VC),然后第二次单击 城市文本字段,此时它将打开 城市列表视图控制器

是否有任何解决方案,如果在主视图控制器上打开任何其他文本字段键盘,我点击城市列表文本字段。比如何关闭该键盘并同时打开城市列表视图控制器?

【问题讨论】:

【参考方案1】:

我想在 viewWillDisappear: 中使用它是有意义的,以便在控制器被解除之前隐藏键盘

[self.view endEditing:YES];

【讨论】:

如何结束这个问题? 打开您的堆栈并打开右上角的声誉。您在下面显示了您提出的问题。选择任何问题,在问题下方,您会显示四个标签 - 共享、编辑、删除和标记。一步一步慢慢来。显示此屏幕截图:prntscr.com/extnm5 我认为它适合您。【参考方案2】:

将此方法应用于TouchesBegan函数

示例代码如下:

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    [self.view endEditing:YES];

当您触摸屏幕上的任何位置时,它会关闭键盘。

【讨论】:

【参考方案3】:

viewController.h

@interface yourViewcontroller : UIViewController
<
UITextFieldDelegate
>

viewController.m

- (void)viewDidLoad

[super viewDidLoad];

yourTextField.delegate=self;


-(BOOL)textFieldShouldReturn:(UITextField *)textField

[self.view endEditing:YES];//dismiss all text field
return YES;

【讨论】:

以上是关于无法关闭文本字段上的键盘的主要内容,如果未能解决你的问题,请参考以下文章

关闭键盘无法与 PickerView 一起使用

数字键盘关闭?

从 uitableviewcell 内的文本字段中关闭 iPad 上的键盘

关闭 iPhone 模拟器上的键盘

滚动视图上的 Xcode 键盘问题

Swift - 如何在文本字段之外点击后关闭数字键盘