1.拖一个Scroll View视图填充View窗口,将Scroll View视图拖大一些,使其超出屏幕。

2.向Scroll View拖(添加)多个Label视图和Text View视图。

3.在.h头文件中添加如下代码:

[cpp] view plaincopyprint?
  1. #import <UIKit/UIKit.h>
  2. @interface ShowTextFiled : UIViewController {
  3. IBOutlet UIScrollView *myscrollview;
  4. UITextField * currentTextfield;//当前的文本筐
  5. BOOL keyboardIsShown;
  6. }
  7. @property (nonatomic,retain)UIScrollView *myscrollview;
  8. @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的内容大小:

[cpp] view plaincopyprint?
  1. - (void)viewDidLoad
  2. {
  3. //下面这两句话必须写,否则scrollview不可以动
  4. myscrollview.frame = CGRectMake(0, 0, 320, 460);
  5. [myscrollview setContentSize:CGSizeMake(320,651 )];
  6. [super viewDidLoad];
  7. // Do any additional setup after loading the view from its nib.
  8. }
- (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方法里面注册:

[cpp] view plaincopyprint?
  1. //页面加载前调用的方法,注册两个通知:一个是键盘弹出来的通知,另外一个是键盘隐藏的通知,不同的通知调用不同的方法进行处理
  2. -(void) viewWillAppear:(BOOL)animated{
  3. //键盘弹起的通知
  4. [[NSNotificationCenter defaultCenter]
  5. addObserver:self
  6. selector:@selector(keyboardDidShow:)
  7. name:UIKeyboardDidShowNotification
  8. object:self.view.window];
  9. //键盘隐藏的通知
  10. [[NSNotificationCenter defaultCenter]
  11. addObserver:self
  12. selector:@selector(keyboardDidHide:)
  13. name:UIKeyboardDidHideNotification
  14. object:nil];
  15. }
//页面加载前调用的方法,注册两个通知:一个是键盘弹出来的通知,另外一个是键盘隐藏的通知,不同的通知调用不同的方法进行处理
-(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方法,这两个方法定义如下:

[cpp] view plaincopyprint?
  1. //键盘弹起后处理scrollView的高度使得textfield可见
  2. -(void)keyboardDidShow:(NSNotification *)notification{
  3. if (keyboardIsShown) {
  4. return;
  5. }
  6. NSDictionary * info = [notification userInfo];
  7. NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
  8. CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
  9. CGRect viewFrame = [myscrollview frame];
  10. viewFrame.size.height -= keyboardRect.size.height;
  11. myscrollview.frame = viewFrame;
  12. CGRect textFieldRect = [currentTextfield frame];
  13. [myscrollview scrollRectToVisible:textFieldRect animated:YES];
  14. keyboardIsShown = YES;
  15. }
//键盘弹起后处理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;
}
[cpp] view plaincopyprint?
  1. //键盘隐藏后处理scrollview的高度,使其还原为本来的高度
  2. -(void)keyboardDidHide:(NSNotification *)notification{
  3. NSDictionary *info = [notification userInfo];
  4. NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
  5. CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
  6. CGRect viewFrame = [myscrollview frame];
  7. viewFrame.size.height += keyboardRect.size.height;
  8. myscrollview.frame = viewFrame;
  9. keyboardIsShown = NO;
  10. }
//键盘隐藏后处理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成员变量

[cpp] view plaincopyprint?
  1. -(void)textFieldDidBeginEditing:(UITextField *)textFieldView{
  2. currentTextfield = textFieldView;
  3. }
-(void)textFieldDidBeginEditing:(UITextField *)textFieldView{
currentTextfield = textFieldView;
}

当用户点击键盘中的Return键时,会促发如下方法:

[cpp] view plaincopyprint?
  1. -(BOOL)textFieldShouldReturn:(UITextField *)textFieldView{
  2. [textFieldView resignFirstResponder];
  3. return NO;
  4. }
-(BOOL)textFieldShouldReturn:(UITextField *)textFieldView{
[textFieldView resignFirstResponder];
return NO;
}

上一个方法中的resignFirstResponder会隐藏键盘,这样会促发另外一个方法:这里将currentTextField设为nil

[cpp] view plaincopyprint?
  1. -(void)textFieldDidEndEditing:(UITextField *)textFieldView{
  2. currentTextfield = nil;
  3. }
-(void)textFieldDidEndEditing:(UITextField *)textFieldView{
currentTextfield = nil;
}

9.最后不要忘了在View窗口关闭之前移除前面注册的通知:

[cpp] view plaincopyprint?
  1. //页面消失前取消通知
  2. -(void)viewWillDisappear:(BOOL)animated{
  3. [[NSNotificationCenter defaultCenter]
  4. removeObserver:self
  5. name:UIKeyboardDidShowNotification
  6. object:nil];
  7. [[NSNotificationCenter defaultCenter]
  8. removeObserver:self
  9. name:UIKeyboardDidHideNotification
  10. object:nil];
  11. }
//页面消失前取消通知
-(void)viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:UIKeyboardDidShowNotification
object:nil];
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:UIKeyboardDidHideNotification
object:nil];
}

生命在于运动,先去打球,晚上回来在继续,哈哈。

Iphone在ScrollView下点击TextField使文本筐不被键盘遮住相关推荐

  1. iPhone在微信下 输入框失去焦点后屏幕卡住问题处理

    iPhone在微信下 输入框失去焦点后屏幕卡住问题处理 代码解决方法 iPhone在微信下 输入框失去焦点后屏幕卡住问题,手动滑动一下平稳问题就可以解决,所以......让需求方自己划动下屏幕吧 代码 ...

  2. 新寻仙霸下boss击杀方法及掉落物品刷新时间图文介绍

    新寻仙新版本霸下来袭新增了"霸下boss",击杀它可以获得丰厚奖励,具体怎么打霸下boss?它会掉落什么奖励?一起来看看具体的活动介绍吧!   霸下boss刷新时间:   &quo ...

  3. 火狐浏览器下点击a标签时出现虚线的解决方案

    火狐浏览器下点击a标签时出现虚线的解决方案 参考文章: (1)火狐浏览器下点击a标签时出现虚线的解决方案 (2)https://www.cnblogs.com/lhyhappy365/p/595646 ...

  4. vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解

    如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...

  5. 关于iis中的网站,在ie下点击服务器控件无反应的问题

    关于iis中的网站,在ie下点击服务器控件无反应的问题 这些天,一直在给新网站添加功能,主要是前台地图的js页面,顺便换了下登录页面,在vs2010中调试时,没有问题,各个浏览器都试过了,ie,fir ...

  6. click传值vue_对vue下点击事件传参和不传参的区别详解

    如下所示: {{btn_text1}} {{btn_text2}} var _vm = new Vue({ data : { btn_text1 : '点击1' , btn_text2 : '点击2' ...

  7. XP的用户账户使用了HTML界面,XP系统点击用户账户显示参数无效怎么办?WinXp下点击用户账户提示参数无效解决方案...

    XP系统开机后,我们通常需要点击用户账户,然后输入账号密码后才能真正进入系统.不过,最近却有一些 原因分析: WinXP用户帐户的主界面是一个基于HTML界面的程序,例如"用户帐户" ...

  8. android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码

    本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item的高度 li ...

  9. vector容器的end是指向最后一个元素的下一个位置,使用时要将迭代器减1,才能获取到最后一个

    vector容器的end是指向最后一个元素的下一个位置,使用时要将迭代器减1,才能获取到最后一个 原因: Cont是容器的类型,容器中定义了一个此容器所用的游标(迭代器)的类型,叫iterator,于 ...

最新文章

  1. 便携式不锈钢管道焊接机器人_304不锈钢管居然可以发黑!?
  2. scala 中List的简单使用
  3. ng2中router-outlet用法
  4. 【重复制造精讲】Backflush 倒冲介绍
  5. TypeError at / __init__() takes exactly 1 argument (2 given)
  6. 机器学习笔记(十二):聚类
  7. 查看nginx php mysql apache编译安装参数
  8. theano 0.7 版本降到0.6 版本
  9. 我老公38岁每晚跑步,身体没变好,衰老还加速了,咋回事?
  10. Graphviz样例之有向图
  11. Oracle BIEE 链接oracle 数据库的问题,报:Check if 'Oracle OCI 10G' database client is installed
  12. ubuntu-Linux系统读取USB摄像头数据(uvc)
  13. [技术博客]使用wx.downloadfile将图片下载到本地临时存储
  14. mysql内存淘汰_mysql内存数据淘汰机制和大查询会不会把内存打爆?
  15. HTTP文件下载原理
  16. VSS 和VDS 交换机区别
  17. matlab做南丁格尔玫瑰图,用VBA做个南丁格尔玫瑰图模板!
  18. 基于Node.js的ORM框架 Prisma的上手使用
  19. 批量取消腾讯微博关注
  20. SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算

热门文章

  1. 求两个整数数组乘积最小值
  2. gcc 编译器使用指南
  3. 重构——解决过长参数列表(long parameter list)
  4. MySQL 8.0.22执行器源码分析HashJoin —— BuildHashTable函数细节步骤
  5. LeetCode 404. 左叶子之和思考分析
  6. 微机原理——总线和时序
  7. Java——集合的基本功能测试
  8. 怎么在vs中查看一个数组的所有元素
  9. msyql 禁止远程访问
  10. 网络基础3-1(细谈IP协议头, 网络层,子网划分,路由选择,数据链路层,以太网帧格式,MAC地址,再谈ARP协议)