zoukankan      html  css  js  c++  java
  • iOS关于键盘弹出后tableview的滑动问题

    在键盘处理的过程中,最容易出现问题的就是,在键盘监听事件中,tableView的frame的修改,网上分享的大部分都是修改frame,这样会导致tableView的cell被遮挡,可能引起获取不到cell的indexPath,导致无法滚动到指定位置
    还有一点就是UITableViewController的使用,如果直接使用UITableViewController,键盘弹出事件是不用我们开发者去处理的,UITableViewController自动帮我们实现了,也就是点击cell中的输入框,就可以直接弹出到可见区域,进行编辑。但UITableViewController的view是一个tableView,也就是说,你想在这个controller里加一个固定位置的view,是不可能的,这就牺牲了页面的可定制性
     

    - (void)registerForKeyboardNotifications { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil]; } - (void)keyboardWillShow:(NSNotification *)aNotification { NSDictionary* info = [aNotification userInfo]; // 注意不要用UIKeyboardFrameBeginUserInfoKey,第三方键盘可能会存在高度不准,相差40高度的问题 CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; // 修改滚动天和tableView的contentInset self.tableView.contentInset = UIEdgeInsetsMake(0, 0, kbSize.height, 0); self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, kbSize.height, 0); // 跳转到当前点击的输入框所在的cell [UIView animateWithDuration:0.5 animations:^{ [self.tableView scrollToRowAtIndexPath:_indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; }]; } - (void)keyboardWillBeHidden:(NSNotification *)aNotification { self.tableView.contentInset = UIEdgeInsetsZero; self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero; }
    这里我们需要添加对键盘事件通知的检测,而对自己的tableView所做的改变,不是frame,而是contentInset,这样就可以保证tableView的滚动范围为键盘上方的区域,可见区域为整个屏幕。
    _indexPath全局变量,需要在textfield的代理中去获取,获取到正在编辑的输入框所在的cell。
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview];
        _indexPath = indexPath;
    }
     
     

    作者:翻炒吧蛋滚饭
    链接:https://www.jianshu.com/p/c01d19b81eed
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表
    CodeForces 464E The Classic Problem | 呆克斯歘 主席树维护高精度
    BZOJ5298 [CQOI2018] 交错序列 | 矩阵乘法和一个trick
    # BZOJ5300 [CQOI2018]九连环 题解 | 高精度 FFT
    [BZOJ5248] 2018九省联考 D1T1 一双木棋 | 博弈论 状压DP
    【2018九省联考】后的瞎扯
    BZOJ 4671 异或图 | 线性基 容斥 DFS
    Luogu 4294 [WC2008]游览计划 | 斯坦纳树
    BZOJ 2434 阿狸的打字机 | AC自动机
    UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
  • 原文地址:https://www.cnblogs.com/langji/p/10138056.html
Copyright © 2011-2022 走看看