zoukankan      html  css  js  c++  java
  • 豪哥学开发之聊天窗口中文输入键盘位置改变

    在viewdidiload方法中除了

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillShow:) name:UIKeyboardWillShowNotification object:nil];

        

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillHide:) name:UIKeyboardWillHideNotification object:nil];

    这两个常用键盘方法外,还需要添加一个方法,这样当键盘切换到中文输入时使用,因为输入框下面会多一行中文选择,

    #ifdef __IPHONE_5_0

        float version = [[[UIDevice currentDevice] systemVersion] floatValue];

        if (version >= 5.0) {

            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardFrameDidChange:) name:UIKeyboardDidChangeFrameNotification object:nil];

        }

    #endif

     上面这个就是需要调用的方法,keyBoardFrameDidChange这个方法名可以自己写一个方法,也可以用keyBoardWillShow,多写一个方法是为了让以后接手的人能够看懂我们这个方法是干什么的,

    下面就是三种方法的实现:(一些被注释的代码我没有删掉,是分析尝试的过程)

    -(void)keyBoardFrameDidChange:(NSNotification *)note

    {

    //    NSDictionary *userInfo = [notification userInfo];

    //    NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];

    //    CGRect keyboardRect = [aValue CGRectValue];

    //    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];

    //    NSTimeInterval animationDuration;

    //    [animationDurationValue getValue:&animationDuration];

        

        CGSize size = [[UIScreen mainScreen] bounds].size;//获取屏幕的尺寸;

        CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];//得到键盘的高度;

        CGFloat ty = size.height - rect.size.height;//

        

        

        [UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] animations:^{

            

            //frame.size.height -= rect.size.height;

           

            if (rect.origin.y != size.height) {

                CGRect frame = self.tableChat.frame;

                frame.size.height = size.height - rect.size.height - 40;//屏幕高度减去键盘高度减去输入框高度,就是新的table的高度,再赋给table,

                  [self.bottomBar setFrame:CGRectMake(0, ty-40, 320, 40)];

                 [self.tableChat setFrame:frame];

            }

            else{

                CGRect frame = self.tableChat.frame;

                frame.size.height = size.height - 40;

                [self.bottomBar setFrame:CGRectMake(0, size.height-40, ScreenWidth, 40)];

            }

            

    //        if (self.bottomBar.frame.origin.y == size.height - 40) {

    //            [self.bottomBar setFrame:CGRectMake(0, ty-40, 320, 40)];

    //        }

    //        else{

    //            [self.bottomBar setFrame:CGRectMake(0, size.height - 40, ScreenWidth, 40)];

    //        }

           

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arrayMessagesFrame.count - 1 inSection:0];

            if (arrayMessagesFrame.count== 0) {

                return ;

            }

            else

            {

                [self.tableChat scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

            }

        }];

    }

    - (void)keyBoardWillShow:(NSNotification *)note{

        

        CGSize size = [[UIScreen mainScreen] bounds].size;

        CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

        CGFloat ty = size.height - rect.size.height;

       

        [UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] animations:^{

            CGRect frame = self.tableChat.frame;

            //frame.size.height -= rect.size.height;

            frame.size.height = size.height - rect.size.height - 40;

            [self.tableChat setFrame:frame];

            

            [self.bottomBar setFrame:CGRectMake(0, ty-40, 320, 40)];

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arrayMessagesFrame.count - 1 inSection:0];

            if (arrayMessagesFrame.count== 0) {

                return ;

            }

            else

            {

                [self.tableChat scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

            }

        }];

    }

    #pragma mark 键盘即将退出

    - (void)keyBoardWillHide:(NSNotification *)note{

        

        CGSize size = [[UIScreen mainScreen] bounds].size;

        CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

        CGFloat ty = size.height - rect.size.height;

        

        [UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] animations:^{

            CGRect frame = self.tableChat.frame;

            frame.size.height += rect.size.height - 60;

           

            [self.tableChat setFrame:frame];

            

            [self.bottomBar setFrame:CGRectMake(0, size.height-40, 320, 40)];

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arrayMessagesFrame.count - 1 inSection:0];

            if (arrayMessagesFrame.count== 0) {

                return ;

            }

            else

            {

                [self.tableChat scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

            }

        }];

        

    }

    #pragma mark - 文本框代理方法

    #pragma mark 点击textField键盘的回车按钮

    - (BOOL)textFieldShouldReturn:(UITextField *)textField{

        

        NSString *content = textField.text;

        if ([content isEqualToString:@""]) {

            return NO;

        }

        [self addMessageWithContent:content type:MessageTypeMe];

        

        NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];

        NSString* strUid = [pref stringForKey:@"uid"];

        

       //NSString *strFrom = @"andy";

       // NSString *strTo   = @"andy";

        NSString *strMsg = [NSString stringWithFormat:@"{"type":"chat","from":"%@","to":"%@","msg":"%@"}",strUid,self.msg.strContact,content];

        

        NSLog(@"input message:%@",strMsg);

        [[NSNotificationCenter defaultCenter] postNotificationName:@"AppSendMessage" object:strMsg];

        

        [self.tableChat reloadData];

        

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arrayMessagesFrame.count - 1 inSection:0];

        [self.tableChat scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

        self.messageField.text = nil;

        

        return YES;

    }

  • 相关阅读:
    一个想法开发与业务,我们互相依赖
    vs2005中文包,和sqlserver2005中文开发版
    C中的指针
    建立一个新的web Site
    Visual Studio 2005 中的新增安全性功能
    htm和html的区别
    完美实现导航滑动功能
    如何避免AJAX的缓存问题
    两个常用的稳定的远端CDN jquery
    推荐一个CSS排错的网址
  • 原文地址:https://www.cnblogs.com/tuhaoYY/p/3872448.html
Copyright © 2011-2022 走看看