iOS软键盘遮挡UITableView内文本框问题

1、注册

UIKeyboardDidShowNotification/UIKeyboardDidHideNotification通知。

-(id) initWithNibName:(NSString*)nibNameOrNil bundle:nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

        // 写在这里,或者viewDidLoad
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShown:) name:UIKeyboardDidShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardHidden:) name:UIKeyboardDidHideNotification object:nil];
    }
    return self;
}

-(void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
}

2、当通知到来,调整frame。

-(void) keyboardShown:(NSNotification*) notification {
    _initialTVHeight = _tableView.frame.size.height;

    CGRect initialFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect convertedFrame = [self.view convertRect:initialFrame fromView:nil];
    CGRect tvFrame = _tableView.frame;
    tvFrame.size.height = convertedFrame.origin.y;
    _tableView.frame = tvFrame;
}

-(void) keyboardHidden:(NSNotification*) notification {
    CGRect tvFrame = _tableView.frame;
    tvFrame.size.height = _initialTVHeight;
    [UIView beginAnimations:@"TableViewDown" context:NULL];
    [UIView setAnimationDuration:0.3f];
    _tableView.frame = tvFrame;
    [UIView commitAnimations];
}

3、触发文本框,滚动tableView

-(void) textFieldDidBeginEditing:(UITextField *)textField {

NSIndexPath* path = [NSIndexPath indexPathForRow:row inSection:section];

[self performSelector:@selector(scrollToCell:) withObject:path afterDelay:0.5f];

}

-(void) scrollToCell:(NSIndexPath*) path {

[_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionNone animated:YES];

}

参考:

1. http://blog.seancarpenter.net/2012/10/15/scrolling-a-uitableview-when-displaying-the-keyboard/

时间: 2024-10-11 01:42:12

iOS软键盘遮挡UITableView内文本框问题的相关文章

android 弹出的软键盘遮挡住EditText文本框的解决方案

1.android 弹出的软键盘遮挡住EditText文本框的解决方案:把Activit对应的布局文件filename.xml文件里的控件用比重设置布局.(例如:android:layout_weight="31")并且尽可能把高度设置成自适应的:android:layout_height="wrap_content",也就是没有设置高度的控件可压缩度的总和,如果比软键盘的高度要大,在EditText文本输入的时候,弹出的软键盘就不会遮挡住文本输入框.2.设置默认软

Android软键盘遮挡的四种解决方案

问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验,这就是开发中非常常见的软键盘遮挡的问题,该如何解决? 简单解决方案  方法一 在你的activity中的oncreate中setContentView之前写上这个代码 getWindow().setSoftInputMode(WindowManager.L

软键盘遮挡解决方案

在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验 这就是开发中非常常见的软键盘遮挡的问题,该如何解决? 解决方案: 方法一:在你的activity中的oncreate中setContentView之前写上这个代码 1 getWindow().setSoftInputMode(WindowManager.Layout

LinearLayout详解四:彻底解决软键盘遮挡输入框的问题

之前把预备知识都介绍完了,话说学以致用,接下来我们要通过重载LinearLayout类来解决软键盘覆盖的问题. 首先阐述一下这个问题,如下图所示: 然后看挡住输入框的情况 然后我们给出xml的源代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:lay

在GridView控件内文本框实现TextChanged事件

本篇是教你实现GridView控件内的TextBox文本框实现自身的TextChanged事件.由于某些功能的需求,GridView控件内嵌TextBox,当TextBox值发生变化时,触发TextChanged事件. 在.aspx网页内,Insus.NET尝试写一个GridView,算了,我们还想在Ajax环境之下运行: 为了实现TextChanged事件,得需要在GridView控件中写OnRowCreated事件,记住是OnRowCreated事件,而不是OnRowDataBound事件.

控制表单控件-获取表单内文本框的个数

代码: ———————————————————— <script type="text/javascript">            //获取表单内文本框的个数            function getInputCount(){                var f = document.forms[0];            //获取表单DOM                var elements = f.elements;        //获取所有的控

iOS开发 编辑框被系统弹出的软键盘遮挡问题

我们在开发注冊界面的时候,最后几个注冊条件经常easy被系统弹出的键盘遮挡,例如以下图: 能够看见,邮箱条件被遮挡掉了,怎么解决呢?我是通过UITextField的代理加计算偏移量: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.emailTextField.delegate = self; } - (

周记3——解决fixed属性在ios软键盘弹出后失效的bug

这周在做空间("类似"qq空间)项目.首页是好友发表的说说,可以针对每条说说进行评论,评论框吸附固定在屏幕底部.此时,Bug来了...在ios上,软键盘弹出后fixed属性失效了.后来发现,ios绝大部分情况把fixed变成了absolute.为什么说是绝大部分情况下而不是100%,后面会提到.下面介绍2种方案... 1.css布局 (推荐) 解决思路:既然在 iOS 下由于软键盘唤出后,页面 fixed 元素会失效,导致跟随页面一起滚动,那么假如--页面不会过长出现滚动,那么即便 f

键盘滚动到当前文本框和按return隐藏

-(void) viewWillAppear:(BOOL)animated { //注册键盘出现通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidshow:) name: UIKeyboardDidShowNotification object:nil]; //注册键盘隐藏通知 [[NSNotificationCenter defaultCenter] addObser