2016-04-21 83 views
1

我有两个文本字段。点击后,第一个显示一个QWERTY键盘,第二个显示选择器。 我的问题是当我点击我的第一个textField时,键盘正常显示。现在,在我输入任何东西之后,我直接想要点击第二个textField,这是显示选择器,键盘应该消失,但键盘仍然存在。 我想单击第二个textField时立即隐藏键盘。键盘不隐藏时点击第二个文本字段

+0

第一点击后第二文本字段被做self.view.endEditing则目前选择器 –

+0

我没有...但不工作 –

+0

..删除textfild&使用按钮为什么使用textfield –

回答

2

有两种方式来实现这一点 -

第一:使用UITextFieldDelegate。 对于觉得─ 列出UITextFieldDelegate在您的视图控制器的协议列表一样,

@interface ViewController : UIViewController <UITextFieldDelegate> 

然后让你的ViewController符合文本字段的委托,以实现像textFieldDidBeginEditing的方法,并textFieldDidEndEditing:

所以,去到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实例分配到currentTextField当您开始键入它喜欢 -

- (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 
} 

在这种情况下,当你点击了侧的文本字段,键盘会自动消失。

+0

我做同样的事情....但它不工作。 –

+0

您选择了哪个选项,第一个还是第二个? – Natasha

+0

如果可能,发布一些代码片段。还可以通过左侧面板上的连接检查器张贴故事板的屏幕截图。检查你自己,如果你已经连接你的文本框和故事板上的插座。 – Natasha

2

使用UITextFieldDelegate组代表在ViewDidLoadself,然后把这个代码

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

我正在这样做,但它不工作 –

1
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