zoukankan      html  css  js  c++  java
  • 键盘弹起收起时不遮挡处理

    view初始化时增加通知:

    {code}

       //增加监听,当键盘出现或改变时收出消息

            [[NSNotificationCenter defaultCenter] addObserver:self

                                                     selector:@selector(keyboardWillShow:)

                                                         name:UIKeyboardWillShowNotification

                                                       object:nil];

            

            //增加监听,当键退出时收出消息

            [[NSNotificationCenter defaultCenter] addObserver:self

                                                     selector:@selector(keyboardWillHide:)

                                                         name:UIKeyboardWillHideNotification

                                                       object:nil];

    {code}

    键盘弹起和收起时触发的动作

    {code}

    - (void)keyboardWillShow:(NSNotification *)notification {

        if (!_highlightedTextField) {// 当前焦点TextField

            return;

        }

        

        UIView *view = [self superview];

        while (![view isKindOfClass:[UIScrollView class]] &&

               [view superview]) {

            view = [view superview];

        }

        if (![view isKindOfClass:[UIScrollView class]]) {

            return;

        }

        

        UIScrollView *scrollView = (UIScrollView *)view;

        

        CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

        CGFloat keyboardHeight = kbSize.height;

        

        UITextField *textField = _highlightedTextField;

        

        if ([UIApplication sharedApplication].windows.count == 0) {

            return;

        }

        

        UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);

        scrollView.contentInset = contentInsets;

        scrollView.scrollIndicatorInsets = contentInsets;

        

        UIWindow *window = [UIApplication sharedApplication].windows[0];

        CGRect textRect = [scrollView convertRect:textField.bounds fromView:textField];

        CGRect scrollRect = [window convertRect:scrollView.bounds fromView:scrollView];

        

        CGFloat scrollBottomMargin = window.height - scrollRect.origin.y - scrollRect.size.height;

        

        CGFloat offset = textRect.origin.y + textRect.size.height - scrollView.contentOffset.y - scrollBottomMargin - (scrollView.height - keyboardHeight);

        

        if (offset > 0) {

            CGPoint scrollPoint = CGPointMake(0.0, scrollView.contentOffset.y + offset);

            [scrollView setContentOffset:scrollPoint animated:YES];

        }

    }

     

    - (void)keyboardWillHide:(NSNotification *)notification{

        UIView *view = [self superview];

        

        while (![view isKindOfClass:[UIScrollView class]] &&

               [view superview]) {

            view = [view superview];

        }

        if (![view isKindOfClass:[UIScrollView class]]) {

            return;

        }

        

        UIScrollView *scrollView = (UIScrollView *)view;

        

        UIEdgeInsets contentInsets = UIEdgeInsetsZero;

        scrollView.contentInset = contentInsets;

        scrollView.scrollIndicatorInsets = contentInsets;

    }

    {code}

  • 相关阅读:
    stagefright框架 Video Playback的流程
    ubuntu 10.10 安装 无线网卡驱动
    ffmpeg 播放 m3u8 ts 流时 av_read_frame 流程
    错误:expected classname before ‘{’ token
    avcodec_decode_video2 第三个参数 got_picture_ptr 的含义
    ndk 编译 ffmpeg
    Windows Phone 7中用好Silverlight开发利器
    利用Visual Studio 2010流程模板实现Scrum敏捷开发(下)
    VS2010中使用IntelliTrace来进行调试
    在Windows Azure中实现和调试一个WCF服务(下)
  • 原文地址:https://www.cnblogs.com/ranger-jlu/p/4829692.html
Copyright © 2011-2022 走看看