Ios 当键盘出现时,如何向上移动底部文本字段?
在我的视图中的字段,当我在第6、7、8次开始输入文本时出现键盘时,我想将我的文本视图向上移动。仅限文本字段。我有一篇博文解释了如何做到这一点: 其要点是为键盘显示和键盘隐藏通知添加通知处理程序。在这些处理程序中,您获得键盘的高度,然后进行一些数学运算,以计算出需要向上移动多少字段,以便键盘不会覆盖它。然后,将视图控制器的视图向上移动,以使字段保持暴露Ios 当键盘出现时,如何向上移动底部文本字段?,ios,objective-c,iphone,Ios,Objective C,Iphone,在我的视图中的字段,当我在第6、7、8次开始输入文本时出现键盘时,我想将我的文本视图向上移动。仅限文本字段。我有一篇博文解释了如何做到这一点: 其要点是为键盘显示和键盘隐藏通知添加通知处理程序。在这些处理程序中,您获得键盘的高度,然后进行一些数学运算,以计算出需要向上移动多少字段,以便键盘不会覆盖它。然后,将视图控制器的视图向上移动,以使字段保持暴露 它比这更复杂,但这都在博客文章中介绍过(其中包括一个键盘技术的工作示例)。有很多选择 我使用TPKeyboardAvoidingScrollVi
它比这更复杂,但这都在博客文章中介绍过(其中包括一个键盘技术的工作示例)。有很多选择 我使用TPKeyboardAvoidingScrollView有很长一段时间了。现在,我使用的IQKeyboardManager更简单,更易于集成 是苹果关于键盘操作的官方文件
- (BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
CGRect frame = self.view.frame;
Float y = frame.origin.y - 70;
frame.origin.y = y;
self.view.frame = frame;
return YES;
}
- (void) textFieldDidEndEditing:(UITextField *)textField{
CGRect frame = self.view.frame;
Float y = frame.origin.y + 70;
frame.origin.y = y;
self.view.frame = frame;
}
若您更改了TextFieldBeginediting方法中的y值(如70、80,…),则应在TextFieldDiEndediting方法中向y添加相同的值
试试这段代码。我试着为你们解答这个问题,结果我得到了答案
#define kOFFSET_FOR_KEYBOARD 80.0
@interface ViewController ()
{
NSInteger tagTF;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)setMovedUp:(BOOL)movedUP
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = self.view.frame;
if(movedUP)
{
rect.origin.y -= kOFFSET_FOR_KEYBOARD;
rect.size.height += kOFFSET_FOR_KEYBOARD;
}
else{
rect.origin.y += kOFFSET_FOR_KEYBOARD;
rect.size.height -= kOFFSET_FOR_KEYBOARD;
}
self.view.frame = rect;
[UIView commitAnimations];
}
#pragma mark - UITextFieldDelegate Methods
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
tagTF = textField.tag;
if(textField.tag>=6)
{
if(self.view.frame.origin.y >= 0)
{
[self setMovedUp:YES];
}
}
return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if(textField.tag>=6)
{
[self setMovedUp:NO];
}
[textField resignFirstResponder];
return YES;
}
根据我上面的回答,我将textField标记从1设置为8。它可以完美地满足您的需要。请为textField设置代理。在发布问题之前,只需谷歌一下即可。您可以给我发送一个链接吗