我有两个textFields。点击后,第一个显示qwerty键盘,第二个显示选择器。 我的问题是,当我点击我的第一个textField时,键盘显示正常。现在,在我输入任何内容后,我直接想要点击第二个textField,这是显示选择器,键盘应该消失,但键盘仍然存在。 我想在单击第二个textField时隐藏键盘。
答案 0 :(得分:3)
有两种方法可以实现这一目标 -
首先:使用UITextFieldDelegate。 为了那个原因- 在视图控制器的协议列表中列出UITextFieldDelegate,如
@interface ViewController : UIViewController <UITextFieldDelegate>
然后让ViewController符合Textfield的委托,以实现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实例时,将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