zoukankan      html  css  js  c++  java
  • UITextView被键盘遮挡的处理

    这个应该是一个通用的任务了吧,键盘弹出来的时候,UITextView(或者UITextField)会被遮挡。 
    解决的办法就不是很能通用了。 
    1. 如果有UIScrollView做父view的话只需要滚动到合适的位置即可。 
    2. 如果没有UIScrollView的话,可以恰当的临时调整一下UITextView的高度,使得最下面一行的输入也能被看到。 

    下面只对第二种情况说明一下要点: 
    我的做法是创建一个UITextView的派生类,这样可以方便重用。 
    (不派生类也是可以的,原理一样。) 
    注册2个Notification消息,分别是UIKeyboardDidShowNotification和UIKeyboardWillHideNotification 

    表示键盘已经弹出来和键盘要消失的时候发送。

    - (void) registerForKeyboardNotifications {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWasShow:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillBeHidden:)
                                                     name:UIKeyboardWillHideNotification
                                                   object:nil];
    }

    消息的处理

    - (void) keyboardWasShow:(NSNotification *) notification {
        //取得键盘frame,注意,因为键盘是window的层面弹出来的,所以其frame坐标也是对应window窗口的
        CGRect endRect = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGPoint endOrigin = endRect.origin;
        
        NSLog(@"keyboard frame = %@",NSStringFromCGRect(endRect));
        //把键盘的frame坐标转换到与UITextView一致的父view上来
        endOrigin = [self.view convertPoint:endOrigin fromView:[UIApplication sharedApplication].keyWindow];
        NSLog(@"endOrigin = %@",NSStringFromCGPoint(endOrigin));
        
        //调整inputView的位置
        CGFloat inputView_Y = self.view.frame.size.height - endRect.size.height - self.inputView.frame.size.height;
        
        [UIView beginAnimations:nil context:nil];
        self.inputView.frame = CGRectMake(self.inputView.frame.origin.x, inputView_Y, self.inputView.frame.size.width, self.inputView.frame.size.height);
        [UIView commitAnimations];
        
    }
    
    - (void) keyboardWillBeHidden:(NSNotification *) notification {
        [UIView beginAnimations:nil context:nil];
        self.inputView.frame = _inputViewOriginalFrame;
        [UIView commitAnimations];
    }

    原文:http://my.oschina.net/dourgulf/blog/80723

  • 相关阅读:
    jqueryeasyui中创建复杂布局
    内表查询用到外表
    某人对为什么不搞.net,不搞web的原因
    眼睛痛的一些原因
    控件包含代码块(即 <% ... %>),因此无法修改控件集合(用户自定义控件中)
    明天留着看
    SqlServer 数据归档
    从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
    生成sql 脚本没有索引
    sqlserver 时间间隔
  • 原文地址:https://www.cnblogs.com/benbenzhu/p/3449148.html
Copyright © 2011-2022 走看看