Lio*_*lak 6 ios resignfirstresponder
我试图通过使用此方法在用户触摸我的UITextField之外时摆脱键盘:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[mainTextController resignFirstResponder];
[super touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎调用了一个按下键盘上的返回按钮后调用的方法,但我只想让键盘消失,而不是按回车键.我怎么能做到这一点?
谢谢!
编辑:tGilani的答案是最直接的方式,就像一个魅力,没有改变到UIControl.但我想jonkroll的答案也有效.
tGi*_*ani 13
尝试
[self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)
更新:
取一个布尔值并在init方法中将其设置为false.在您的textFieldShouldReturn委托方法方法中,如果为false则执行代码,否则跳过
- (BOOL) textFieldShouldReturn:(UITextField*)textField
{
if (!boolean)
{
// YOur code logic here
}
boolean = false;
}
Run Code Online (Sandbox Code Playgroud)
在调用endEditing方法的方法中,将boolean设置为true.
boolean = YES;
[self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)
这是我以前处理过的方式.首先在视图控制器上创建一个方法,通过在文本字段上重新设置第一响应者状态来关闭键盘:
- (IBAction)dismissKeyboard:(id)sender
{
[mainTextController resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
接下来,在您的故事板场景中ViewController(或者nib,如果您不使用故事板)将ViewController view属性的类更改UIView为UIControl.该view属性实际上是您的其他UI元素背后的背景.类类型需要更改,因为UIView无法响应触摸事件,但UIControl(它的直接子类UIView)可以响应它们.
最后,在ViewController的viewDidLoad:方法中,告诉视图控制器dismissKeyboard在视图收到UIControlEventTouchDown事件时执行您的方法.
- (void)viewDidLoad
{
[super viewDidLoad];
UIControl *viewControl = (UIControl*)self.view;
[viewControl addTarget:self action:@selector(dismissKeyboard:) forControlEvents:UIControlEventTouchDown];
}
Run Code Online (Sandbox Code Playgroud)
编辑:
您关注的部分内容似乎textFieldDidEndEditing:是在键盘被解除时调用的.这是不可避免的,只要文本字段失去焦点(即第一响应者状态),就会始终调用它.听起来你的问题是,当用户点击返回按钮时,你已经放置了代码textFieldDidEndEditing:.如果您不希望在用户触摸文本字段之外时运行该代码,那么这不是放置它的正确位置.
相反,我会将该代码放在一个单独的方法中:
- (IBAction)textFieldReturn:(id)sender
{
if ([mainTextController isFirstResponder]) {
[mainTextController resignFirstResponder];
// put code to run after return key pressed here...
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在文本字段发送控件事件时通过Target-Action调用该方法UIControlEventEditingDidEndOnExit.
[mainTextController addTarget:self action:@selector(textFieldReturn:) forControlEvents:UIControlEventEditingDidEndOnExit];
Run Code Online (Sandbox Code Playgroud)
注意UIControlEventEditingDidEndOnExit不同于UIControlEventEditingDidEnd.当用户触摸控件外部时编辑结束时调用前者,当用户按下返回键时编辑结束时调用后者.
| 归档时间: |
|
| 查看次数: |
27968 次 |
| 最近记录: |