• 弹出键盘怎样把tableview往上顶?不遮住输入行


    弹出键盘怎样把tableview往上顶?不遮住输入行   
     
     
     
    弹出键盘怎样把tableview往上顶?不遮住输入行 
     
     
     
     
     
     
    - (void)registerForKeyboardNotifications {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
        NSLog(@"register");
    }
    - (void)keyboardWasShown:(NSNotification *)aNotification {
        NSDictionary* info = [aNotification userInfo];
        CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
        
        UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
        displayTable.scrollEnabled = YES;
        displayTable.contentInset = contentInsets;
        displayTable.scrollIndicatorInsets = contentInsets;
        NSLog(@"keyboardWasShown");
        
        // If active text field is hidden by keyboard, scroll it so it's visible
        // Your application might not need or want this behavior.
        CGRect aRect = self.view.frame;
        aRect.size.height -= kbSize.height;
        if (!CGRectContainsPoint(aRect, activeField.superview.superview.frame.origin) ) {
            CGPoint scrollPoint = CGPointMake(0.0, activeField.superview.superview.frame.origin.y-aRect.size.height+44);
            [displayTable setContentOffset:scrollPoint animated:YES];
        }    
    }
    - (void)keyboardWillBeHidden:(NSNotification *)aNotification {
        UIEdgeInsets contentInsets = UIEdgeInsetsZero;
        displayTable.contentInset = contentInsets;
        displayTable.scrollIndicatorInsets = contentInsets;
    }

    [self registerForKeyboardNotifications] 
     
     
    
    
     
     
     
     
     
    做出来了,注册UIKeyboardDidShowNotification通知,在里面可以得到键盘的大小,算出键盘的搜索条间的矩形,加上一个背景为黑色 alpha为0.9的UIView 就行了,有搜索结果,再往上加UItableView 
     
     
     
    
    
     
     
     
     
     
     
     
    最正规的办法,用通知
    step 1:
    在进入视图的时候添加监视:(viewDidLoad什么的)
    复制代码
    // Observe keyboard hide and show notifications to resize the text view appropriately.
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];


    step 2:
    在键盘动作的时候移动视图:
    复制代码
    - (void)keyboardWillShow:(NSNotification *)notification {
       
        /*
         Reduce the size of the text view so that it's not obscured by the keyboard.
         Animate the resize so that it's in sync with the appearance of the keyboard.
         */
        NSDictionary *userInfo = [notification userInfo];
       
        // Get the origin of the keyboard when it's displayed.
        NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
        // Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.
        CGRect keyboardRect = [aValue CGRectValue];
        keyboardRect = [self.view convertRect:keyboardRect fromView:nil];
       
        CGFloat keyboardTop = keyboardRect.origin.y;
        CGRect newTextViewFrame = self.view.bounds;
        newTextViewFrame.size.height = keyboardTop - self.view.bounds.origin.y;
       
        // Get the duration of the animation.
        NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
        NSTimeInterval animationDuration;
        [animationDurationValue getValue:&animationDuration];
       
        // Animate the resize of the text view's frame in sync with the keyboard's appearance.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:animationDuration];
       
        textView.frame = newTextViewFrame;
        [UIView commitAnimations];
    }
    - (void)keyboardWillHide:(NSNotification *)notification {
       
        NSDictionary* userInfo = [notification userInfo];
       
        /*
         Restore the size of the text view (fill self's view).
         Animate the resize so that it's in sync with the disappearance of the keyboard.
         */
        NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
        NSTimeInterval animationDuration;
        [animationDurationValue getValue:&animationDuration];
       
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:animationDuration];
       
        textView.frame = self.view.bounds;
       
        [UIView commitAnimations];
    }


    step 3:
    在退出视图的时候注销通知
    viewDidUnload:
    复制代码
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

    dealloc:
    复制代码
    [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:nil];



    这些代码是摘自apple sample code KeyboardAccessory.
    些许细节自己修改下就好了,比如那个textView 
     
     
    
    
     
     
     
     
     
    - (BOOL)textFieldDidBeginEditing:(UITextField *)textField
    {
        UITableViewCell * cell=(UITableViewCell *)[[textField  superview] superview];
        NSIndexPath *indexPath=[curTable indexPathForCell:cell];
        if (indexPath.section==0) {
            
        }else {
            [UIView beginAnimations:@"ResizeForKeyBoard" context:nil];
            [UIView setAnimationDuration:0.30f];  
            point = curTable.center;
            curTable.center = CGPointMake(160, 120);
            [UIView commitAnimations];
        }
        return YES;
    }

    - (BOOL)textFieldDidEndEditing:(UITextField *)textField
    {
        UITableViewCell * cell=(UITableViewCell *)[[textField  superview] superview];
        NSIndexPath *indexPath=[curTable indexPathForCell:cell];
        
        if (indexPath.section==0) {
            
        }else {
            [UIView beginAnimations:@"ResizeForKeyBoard" context:nil];
            [UIView setAnimationDuration:0.30f];  
            
            curTable.center = point;
            [UIView commitAnimations];
        }
        return YES;
    }


    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        
        [textField resignFirstResponder];
        
        return YES;
     
  • 相关阅读:
    typora, OneNote, notion, hexo, csdn,博客园对比
    Ubuntu18.04虚拟机下,docker拉取Oralce镜像
    [问题日志]wsl子系统卸载后重装出现故障的解决方案
    b站如何一次性取关10人
    (未完)CCF第24+25届全国计算辅助设计与图形学学术会议简记
    foolrenderer构建记录
    阿里云付哲:边缘云技术创新 让“云”无处不在
    从阿里云全球实时传输网络GRTN出发,浅谈QOE优化实践
    源于加速,不止加速 阿里云加速引擎的10年演化之路
    低成本、强交互、沉浸式的云游戏,究竟如何实现?
  • 原文地址:https://www.cnblogs.com/wangxiaorui/p/5158148.html
Copyright © 2020-2023  润新知