根据键盘的弹出隐藏自动调整View的位置

1.首先注册系统通知

    //监听键盘通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];

2.键盘将要改变时的相应处理

-(void)keyboardWillChangeFrameNotification:(NSNotification *)note{
  
    //取出键盘动画的时间(根据userInfo的key----UIKeyboardAnimationDurationUserInfoKey)
    CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    
    //取得键盘最后的frame(根据userInfo的key----UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 227}, {320, 253}}";)
    CGRect keyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    //计算控制器的view需要平移的距离
    CGFloat transformY = keyboardFrame.origin.y - self.view.frame.size.height;
    
    //执行动画
    [UIView animateWithDuration:duration animations:^{
        //平移
        self.view.transform = CGAffineTransformMakeTranslation(0, transformY);
    }];
}

3.这样其实还没完(存在内存隐患)还需要重写dealloc方法

-(void)dealloc{

//使用通知中心后必须重写dealloc方法,进行释放(ARC)(非ARC还需要写上[super dealloc];)

//removeObserver和 addObserver相对应.

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

时间: 2024-12-24 02:47:57

根据键盘的弹出隐藏自动调整View的位置的相关文章

关于项目中很多键盘无故弹出或无隐藏的总结

1.activity的键盘问题 当布局中有EditText时,键盘有时会主动弹出影响界面效果,解决方式如下: 在清单文件-Manifest.xml中设定activity的属性 1.键盘的隐藏 android:windowSoftInputMode="stateHidden|stateUnchanged" "stateUnspecified"是指软键盘的状态(是否它是隐藏或可见)没有被指定. "stateHidden" 当用户选择该Activity

Android之弹出/隐藏系统软键盘

Android弹出/隐藏系统软键盘的代码如下: InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(inputComment, InputMethodManager.SHOW_FORCED); // 强制打开软键盘 imm.hideSoftInputFromWindow(inputComment.getWindowToken(

Android: View换切后,无法正常设置焦点或切换后TextView的虚拟键盘不弹出

边学.边测试,花了三天时间完工一个小应用. 遇到很多问题,但最终还是解决了. 我的手机是Android2.2版,所以我也在是2.2版环境下学习,开发. 1. 在同一个Activity中的不同View(layout)中切换界面时,经常发生TextView无法正常取得焦点. 或者更严重的情况是,有了焦点,但点击后,虚拟键盘不弹出,根本就无法正常输入数据. 我昨天晚上为了解决这个焦点和虚拟键盘不弹出的问题,花了三个小时. 最终的解决方法: 当由view1 切换到 view2 时: setContent

判断软键盘的弹出

未弹出软键盘时的布局,很简单,只有一个webview加一个底部bar,底部bar由一个linearlayout包含四个button组成. 当布局中有webview时,点击webview上的输入框,会有软键盘弹出以输入文字. 问题:此时,如果布局含有底部bar,底部bar会被软键盘托起.如下图所示: 解决方式: 使用  RelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(listener);监听软键盘是否弹出,在弹出时隐藏底

bug日志(1):UIAlertView消失之后收起的键盘又弹出

iOS8之后,有了UIAlertController这个类,如下 NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertController : UIViewController 很明显,苹果强烈建议广大码农们如果能不用UIAlertView就不要用啦,因为我们有UIAlertController了! 进入正题...... 为了兼容iOS7,我们的项目中就统一使用了UIAlertView.问题来了:(项目中的某一)界面中textField处于编辑状态(界面上

Android 另类方法监听软键盘的弹出收起事件

http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且会自动获得焦点弹出软键盘.由a界面进入b界面,再结束b界面返回a界面,就会在a界面上留下一片和软键盘大小相同的灰色区域,具体原因搞了很久也不清楚.但是问题总是要解决的,我在a的fragment上折腾了半天,始终没什么用.然后就想着在b界面折腾折腾,关闭activity的时候先收起挼键盘,软键盘收起完

iOS 8 模拟器键盘无法弹出

这是比较奇葩的问题,真机上键盘可以弹出,但模拟器上不行,这个我们测试程序带来了很多麻烦,后来找到了解决方法: 这样就正常了. 选了这个就直接连电脑上的键盘了.

关于ios8模拟器不能输入中文问题以及软键盘不弹出问题

在Xcode菜单栏中   Product->scheme->Edit Scheme->Options->Application Region改为中国,就可以输入中文了, 如果软键盘不弹出,则按shift+command+k,因为ios8外置键盘和软键盘只支持一个.

Android软键盘强制弹出,隐藏输入法.

本文实例讲述了Android实现弹出键盘代码,是一个非常实用的功能.代码非常简洁.分享给大家供大家参考. 具体功能代码如下: ? 1 2 3 4 5 6 7 8 Timer timer = new Timer(); timer.schedule(new TimerTask() {  @Override  public void run() {  InputMethodManager m = (InputMethodManager) editText.getContext().getSystemS