单击第二个textField时,键盘未隐藏

时间:2016-04-21 08:30:42

标签: ios iphone swift

我有两个textFields。点击后,第一个显示qwerty键盘,第二个显示选择器。 我的问题是,当我点击我的第一个textField时,键盘显示正常。现在,在我输入任何内容后,我直接想要点击第二个textField,这是显示选择器,键盘应该消失,但键盘仍然存在。 我想在单击第二个textField时隐藏键盘。

3 个答案:

答案 0 :(得分:3)

有两种方法可以实现这一目标 -

首先:使用UITextFieldDelegate。 为了那个原因- 在视图控制器的协议列表中列出UITextFieldDelegate,如

@interface ViewController : UIViewController <UITextFieldDelegate>

然后让ViewController符合Textfield的委托,以实现textFieldDidBeginEditingtextFieldDidEndEditing:

等方法

所以,转到viewDidLoad方法并遵守UITextField的协议,如 -

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.firstTextField.delegate = self; //assuming your first textfield's 
                                         //name is firstTextField
   //Also give your first textfield a tag to identify later

    self.firstTextField.tag = 1;
}

现在,您将设置为实现委托方法。但是,要首先实现目标,您需要使用UITextField实例来了解何时键入firstTextField。因此,声明UITextField类型的属性。在接口文件中执行此操作,如 -

@property(nonatomic, strong) UITextField *currentTextField;

现在在textFieldDidBeginEditing委托方法中,当你开始输入firstTextField实例时,将firstTextField实例分配给currentTextField,如< - p>

- (void)textFieldDidBeginEditing:(UITextField *)textField{
       if(textField.tag == 1){
           self.currentTextField = textField;
       }
}

之后在textFieldDidEndEditing方法中,检查它是否是您要出现的当前文本字段,并将键盘解除为 -

-(void)textFieldDidEndEditing:(UITextField *)textField{
          if(textField.tag == 1){
              [self.currentTextField resignFirstResponder];
          }
          return YES;
     }

第二:您可以使用UIResponder。当ViewControllers继承自UIResponder时,您只需覆盖方法 - touchesBegan:withEvent方法,例如 -

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [self.view endEditing:YES];// this will do the trick
}

在这种情况下,当您单击textField的一侧时,键盘应自动消失。

答案 1 :(得分:2)

UITextFieldDelegate中使用self设置委托给ViewDidLoad,然后输入此代码

func textFieldDidEndEditing(textField: UITextField) 
{
    yourtextfieldname.resignFirstResponder()
    return true
}

答案 2 :(得分:2)

Step 1 :- Code for ViewController.h :-                                                   

//add UITextFieldDelegate just after UIViewController

@interface ViewController : UIViewController<UITextFieldDelegate>

Step 2 :- Code For ViewController.m :-

//inside viewdidLoad write following code, where txtInput is outlet for input text field

_txtInput.delegate = self;

// Last Thing write following code just above @end

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}

//that's it use this very simple way