无法解除文本字段上的键盘

时间:2017-04-15 12:33:13

标签: ios objective-c uitextfield

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

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

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

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

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

工作正常,但问题是如果我点击客户文本字段,它会同时打开键盘我点击城市文本字段比打开城市列表查看控制器但键盘不会被解雇。键盘也显示在城市列表视图控制器

我已尝试过以下思考。

我已经尝试使用 [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;


}

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

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

3 个答案:

答案 0 :(得分:0)

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

[self.view endEditing:YES];

答案 1 :(得分:0)

TouchesBegan 功能

上应用此方法

示例代码如下:

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

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

答案 2 :(得分:0)

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