Iphone在ScrollView下点击TextField使文本筐不被键盘遮住
1.拖一个Scroll View视图填充View窗口,将Scroll View视图拖大一些,使其超出屏幕。
2.向Scroll View拖(添加)多个Label视图和Text View视图。
3.在.h头文件中添加如下代码:
- #import <UIKit/UIKit.h>
- @interface ShowTextFiled : UIViewController {
- IBOutlet UIScrollView *myscrollview;
- UITextField * currentTextfield;//当前的文本筐
- BOOL keyboardIsShown;
- }
- @property (nonatomic,retain)UIScrollView *myscrollview;
- @end
#import <UIKit/UIKit.h>
@interface ShowTextFiled : UIViewController {
IBOutlet UIScrollView *myscrollview;
UITextField * currentTextfield;//当前的文本筐
BOOL keyboardIsShown;
}
@property (nonatomic,retain)UIScrollView *myscrollview;
@end
4.在Interface Builer中,将每个Text Field的delegate连接到File‘s Owner。这一步很重要,因为它使得文本筐的各种事件如:textFieldDidBeginEditing。textFieldDidEndEditing等可被试图控制器处理。
5.在viewDidLoad方法里面修改ScrollView的内容大小:
- - (void)viewDidLoad
- {
- //下面这两句话必须写,否则scrollview不可以动
- myscrollview.frame = CGRectMake(0, 0, 320, 460);
- [myscrollview setContentSize:CGSizeMake(320,651 )];
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- }
- (void)viewDidLoad
{
//下面这两句话必须写,否则scrollview不可以动
myscrollview.frame = CGRectMake(0, 0, 320, 460);
[myscrollview setContentSize:CGSizeMake(320,651 )];
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
6.在View窗口显示以前注册两个通知,这两个通知可以告诉你键盘何时显示或消失,在viewWillAppear方法里面注册:
- //页面加载前调用的方法,注册两个通知:一个是键盘弹出来的通知,另外一个是键盘隐藏的通知,不同的通知调用不同的方法进行处理
- -(void) viewWillAppear:(BOOL)animated{
- //键盘弹起的通知
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(keyboardDidShow:)
- name:UIKeyboardDidShowNotification
- object:self.view.window];
- //键盘隐藏的通知
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(keyboardDidHide:)
- name:UIKeyboardDidHideNotification
- object:nil];
- }
//页面加载前调用的方法,注册两个通知:一个是键盘弹出来的通知,另外一个是键盘隐藏的通知,不同的通知调用不同的方法进行处理
-(void) viewWillAppear:(BOOL)animated{
//键盘弹起的通知
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardDidShowNotification
object:self.view.window];
//键盘隐藏的通知
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(keyboardDidHide:)
name:UIKeyboardDidHideNotification
object:nil];
}
7.上面的通知中,当键盘弹起的时候会调用 keyboardDidShow方法,当键盘消失会调用keyboardDidHide方法,这两个方法定义如下:
- //键盘弹起后处理scrollView的高度使得textfield可见
- -(void)keyboardDidShow:(NSNotification *)notification{
- if (keyboardIsShown) {
- return;
- }
- NSDictionary * info = [notification userInfo];
- NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
- CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
- CGRect viewFrame = [myscrollview frame];
- viewFrame.size.height -= keyboardRect.size.height;
- myscrollview.frame = viewFrame;
- CGRect textFieldRect = [currentTextfield frame];
- [myscrollview scrollRectToVisible:textFieldRect animated:YES];
- keyboardIsShown = YES;
- }
//键盘弹起后处理scrollView的高度使得textfield可见
-(void)keyboardDidShow:(NSNotification *)notification{
if (keyboardIsShown) {
return;
}
NSDictionary * info = [notification userInfo];
NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
CGRect viewFrame = [myscrollview frame];
viewFrame.size.height -= keyboardRect.size.height;
myscrollview.frame = viewFrame;
CGRect textFieldRect = [currentTextfield frame];
[myscrollview scrollRectToVisible:textFieldRect animated:YES];
keyboardIsShown = YES;
}
- //键盘隐藏后处理scrollview的高度,使其还原为本来的高度
- -(void)keyboardDidHide:(NSNotification *)notification{
- NSDictionary *info = [notification userInfo];
- NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
- CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
- CGRect viewFrame = [myscrollview frame];
- viewFrame.size.height += keyboardRect.size.height;
- myscrollview.frame = viewFrame;
- keyboardIsShown = NO;
- }
//键盘隐藏后处理scrollview的高度,使其还原为本来的高度
-(void)keyboardDidHide:(NSNotification *)notification{
NSDictionary *info = [notification userInfo];
NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
CGRect viewFrame = [myscrollview frame];
viewFrame.size.height += keyboardRect.size.height;
myscrollview.frame = viewFrame;
keyboardIsShown = NO;
}
8.重写TextField的三个事件方法:
当点击TextField视图时会促发如下方法:这个方法会将当前点击的文本筐赋值给currentTextField成员变量
- -(void)textFieldDidBeginEditing:(UITextField *)textFieldView{
- currentTextfield = textFieldView;
- }
-(void)textFieldDidBeginEditing:(UITextField *)textFieldView{
currentTextfield = textFieldView;
}
当用户点击键盘中的Return键时,会促发如下方法:
- -(BOOL)textFieldShouldReturn:(UITextField *)textFieldView{
- [textFieldView resignFirstResponder];
- return NO;
- }
-(BOOL)textFieldShouldReturn:(UITextField *)textFieldView{
[textFieldView resignFirstResponder];
return NO;
}
上一个方法中的resignFirstResponder会隐藏键盘,这样会促发另外一个方法:这里将currentTextField设为nil
- -(void)textFieldDidEndEditing:(UITextField *)textFieldView{
- currentTextfield = nil;
- }
-(void)textFieldDidEndEditing:(UITextField *)textFieldView{
currentTextfield = nil;
}
9.最后不要忘了在View窗口关闭之前移除前面注册的通知:
- //页面消失前取消通知
- -(void)viewWillDisappear:(BOOL)animated{
- [[NSNotificationCenter defaultCenter]
- removeObserver:self
- name:UIKeyboardDidShowNotification
- object:nil];
- [[NSNotificationCenter defaultCenter]
- removeObserver:self
- name:UIKeyboardDidHideNotification
- object:nil];
- }
//页面消失前取消通知
-(void)viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:UIKeyboardDidShowNotification
object:nil];
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:UIKeyboardDidHideNotification
object:nil];
}
生命在于运动,先去打球,晚上回来在继续,哈哈。
Iphone在ScrollView下点击TextField使文本筐不被键盘遮住相关推荐
- iPhone在微信下 输入框失去焦点后屏幕卡住问题处理
iPhone在微信下 输入框失去焦点后屏幕卡住问题处理 代码解决方法 iPhone在微信下 输入框失去焦点后屏幕卡住问题,手动滑动一下平稳问题就可以解决,所以......让需求方自己划动下屏幕吧 代码 ...
- 新寻仙霸下boss击杀方法及掉落物品刷新时间图文介绍
新寻仙新版本霸下来袭新增了"霸下boss",击杀它可以获得丰厚奖励,具体怎么打霸下boss?它会掉落什么奖励?一起来看看具体的活动介绍吧! 霸下boss刷新时间: &quo ...
- 火狐浏览器下点击a标签时出现虚线的解决方案
火狐浏览器下点击a标签时出现虚线的解决方案 参考文章: (1)火狐浏览器下点击a标签时出现虚线的解决方案 (2)https://www.cnblogs.com/lhyhappy365/p/595646 ...
- vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解
如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...
- 关于iis中的网站,在ie下点击服务器控件无反应的问题
关于iis中的网站,在ie下点击服务器控件无反应的问题 这些天,一直在给新网站添加功能,主要是前台地图的js页面,顺便换了下登录页面,在vs2010中调试时,没有问题,各个浏览器都试过了,ie,fir ...
- click传值vue_对vue下点击事件传参和不传参的区别详解
如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...
- XP的用户账户使用了HTML界面,XP系统点击用户账户显示参数无效怎么办?WinXp下点击用户账户提示参数无效解决方案...
XP系统开机后,我们通常需要点击用户账户,然后输入账号密码后才能真正进入系统.不过,最近却有一些 原因分析: WinXP用户帐户的主界面是一个基于HTML界面的程序,例如"用户帐户" ...
- android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码
本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item的高度 li ...
- vector容器的end是指向最后一个元素的下一个位置,使用时要将迭代器减1,才能获取到最后一个
vector容器的end是指向最后一个元素的下一个位置,使用时要将迭代器减1,才能获取到最后一个 原因: Cont是容器的类型,容器中定义了一个此容器所用的游标(迭代器)的类型,叫iterator,于 ...
最新文章
- 便携式不锈钢管道焊接机器人_304不锈钢管居然可以发黑!?
- scala 中List的简单使用
- ng2中router-outlet用法
- 【重复制造精讲】Backflush 倒冲介绍
- TypeError at / __init__() takes exactly 1 argument (2 given)
- 机器学习笔记(十二):聚类
- 查看nginx php mysql apache编译安装参数
- theano 0.7 版本降到0.6 版本
- 我老公38岁每晚跑步,身体没变好,衰老还加速了,咋回事?
- Graphviz样例之有向图
- Oracle BIEE 链接oracle 数据库的问题,报:Check if 'Oracle OCI 10G' database client is installed
- ubuntu-Linux系统读取USB摄像头数据(uvc)
- [技术博客]使用wx.downloadfile将图片下载到本地临时存储
- mysql内存淘汰_mysql内存数据淘汰机制和大查询会不会把内存打爆?
- HTTP文件下载原理
- VSS 和VDS 交换机区别
- matlab做南丁格尔玫瑰图,用VBA做个南丁格尔玫瑰图模板!
- 基于Node.js的ORM框架 Prisma的上手使用
- 批量取消腾讯微博关注
- SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算