iOS-基于键盘显示的UITextField高度和按钮移动的变化
Posted
技术标签:
【中文标题】iOS-基于键盘显示的UITextField高度和按钮移动的变化【英文标题】:iOS- Change of UITextField height and movement of Buttons based on keyboard display 【发布时间】:2013-12-11 13:19:25 【问题描述】:我在 ios 中有一个视图,其中 UITextField 下方有一个 UITextfield 和 3 个 UIbuttons。请看下面的图片。启动此视图时,默认状态为 STATE1。(请参见图片)。默认情况下键盘是可见的。现在,当我处理键盘时,我希望调整编辑文本的大小并占据整个屏幕,如 STATE2 所示。
我不知道如何做到这一点。我将 UITextfield 的高度硬编码为基于目标设备的某个 dp。我相信这必须改变,它必须根据屏幕尺寸动态地占据屏幕。
谁能帮我完成这个。请考虑该按钮就像编辑文本的尾巴。无论键盘是否可见,这都会紧贴编辑文本。谢谢
【问题讨论】:
【参考方案1】:您可以使用TPKeyboardAvoiding 库并实现您想要的。
【讨论】:
阅读。会回复你的。谢谢【参考方案2】:首先你必须使用 UITextView 而不是 UITextField
为你的班级注册
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
实现这个方法
- (void)keyboardWillHide:(NSNotification *)notification
[self resizeViewWithOptions:[notification userInfo]];
- (void)keyboardWillShow:(NSNotification *)notification
[self resizeViewWithOptions:[notification userInfo]];
- (void)resizeViewWithOptions:(NSDictionary *)options
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardEndFrame;
[[options objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[options objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[options objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:animationCurve];
[UIView setAnimationDuration:animationDuration];
CGRect viewFrame = self.view.frame;
CGRect keyboardFrameEndRelative = [self.view convertRect:keyboardEndFrame fromView:nil];
NSLog(@"keyboardFrameEndRelative: %@", NSStringFromCGRect(keyboardFrameEndRelative));
// Now set Frame for UITextView and UIbuttons frame here
【讨论】:
嗨 Bhuvaneshwar,我们需要在哪里注册课程。你能告诉我吗。这里的 addObserver 是什么?谢谢 @TimothyRajan 在您的类本身中,您必须编写此方法。在viewdidLoad' and define this method in same class. Here
addObserver 中注册您的键盘通知类作为目标。【参考方案3】:
尝试这样更简单,首先添加那些你想要的控件,在状态 1 中看起来像这样
在 viewDidAppear 中添加如下函数
-(void)viewDidAppear:(BOOL)animated
[self.Textfield1 becomeFirstResponder];
所以它会在视图加载时加载键盘
然后将此行添加到 .m 以关闭键盘按回车将隐藏键盘
-(BOOL) textFieldShouldReturn:(UITextField *)textField
//Write your coding for resizing size dynamically to show look like state 2
//Here check version of device to set as per height
textfield.frame=CGRectMake(0,0,320,400);
button1.frame=CGRectMake(0,400,320,400);
[textField resignFirstResponder];
return YES;
不要忘记为文本字段添加委托
【讨论】:
以上是关于iOS-基于键盘显示的UITextField高度和按钮移动的变化的主要内容,如果未能解决你的问题,请参考以下文章
iOS 键盘处理(改变键盘为完成键),UITextField键盘显示隐藏,弹出,回弹
在 UITextField 和软件键盘 ios 之间提供最小填充