zoukankan      html  css  js  c++  java
  • 弹出键盘怎样把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;
     
  • 相关阅读:
    打开 ASP.NET 配置设置窗体
    WCF中Service Configuration Editor的使用方法
    使用Process类调用EXE程序出错的问题
    C#子窗口关闭父窗口
    WCF客户端代理文件创建和使用中的问题
    JS 中的文件操作
    WCF在 IIS上面 部署的步骤
    asp.net中怎么将json格局的数据添加下拉菜单
    计算两个日期相差的天数
    SQL语句解释大全
  • 原文地址:https://www.cnblogs.com/wangxiaorui/p/5158148.html
Copyright © 2011-2022 走看看