textFieldDidEndEditing moves the screen when not wanted
在我的应用程序中,我的uitextfields位于键盘顶部的下方,因此我必须向上移动视图,以便在编辑时,文本字段在键盘上可见。为此,我使用了uitextfieldDelegate方法,textfieldDidbeginediting:。然后在方法textfieldDindediting:中,我将视图下移。
当我尝试在文本字段之间切换时,会出现问题。当我这样做时,委托调用方法textfieldDindediting:然后立即调用textfieldDibegineding:对于另一个文本字段,它使视图向下,然后立即向上,因此看起来像是屏幕震动。有没有解决这个问题的办法?
我刚刚遇到了同样的问题,这就是我找到的解决方案。
设置一个单独的方法,以便在退出textfield键盘时进行处理,并将self.view.center重新对齐放置在其中。这样,可以确保textfieldDindediting方法保持独立。
如果我没有正确地解释自己,这里有一个例子。请注意,当用户点击文本字段时,我会在导航栏中放置一个完成按钮(因为它是一个数字键盘),尽管您可以将此方法链接到普通键盘上的完成按钮:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | - (void)textFieldDidBeginEditing:(UITextField *)textField { UIBarButtonItem *hideKeyboardButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(resignResponder:)]; [self.navigationItem setRightBarButtonItem:hideKeyboardButton animated:YES]; } - (void)textFieldDidEndEditing:(UITextField *)textField { //Nothing needs to go here anymore } - (void)resignResponder:(id)sender { [textField resignFirstResponder]; //Use core animation instead of the simple action below in order to reduce 'snapback' self.view.center = CGRectMake(0, 0, 320, 480); } |
我用另一种方法来解决这个问题:当从一个编辑控件切换到另一个编辑控件(field1->field2)时,您将收到以下消息:
- 文本字段应注册(字段2)
- 文本字段应拒绝专用(字段1)
- 文本字段结束编辑(字段1)
- 文本字段didbeginediting(字段2)
我要做的是使用一个计数器变量(x):
- 在textfieldShouldBeginediting中添加x+=1
- 在textfieldShouldenDedicing中添加x-=1
然后:
- 在textfieldDindediting中,如果x<0,则将控件拉伸到原始位置。
- 在textfieldDidbeginediting中,如果x>0,则向上滚动控件
我认为移动textfield的最佳方法是注册通知
1 2 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; |
在键盘中修改textfield帧是否显示:&keyboardwillhide:
只需签入您所处的文本字段(例如,为它们提供