通知-键盘通知和模仿QQ拖拽弹出键盘

目录

  1. 表格视图跟随键盘的弹出而移动
  2. 模仿QQ拖拽弹出键盘

实例一: 表格视图跟随键盘的弹出而移动

1、订阅键盘的frame即将改变的通知(可以在viewDidLoad)

//监听键盘frame变化
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

2、通知到达后执行的方法,通知到达改变view的位置

- (void)keyboardWillChangeFrame:(NSNotification *)noti {
//NSLog(@"%@",noti.userInfo); //键盘弹出/消失的时候。获取最终位置
CGRect keyBoardFrame = [noti.userInfo[@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
//用键盘的最终的y值 - view自身的高度,就是要移动的距离
CGFloat ct = keyBoardFrame.origin.y - self.view.frame.size.height;
//获取键盘的动画时间
CGFloat duration = [noti.userInfo[@"UIKeyboardAnimationDurationUserInfoKey"] floatValue];
[UIView animateWithDuration:duration animations:^{ //平移view
self.view.transform = CGAffineTransformMakeTranslation(0, ct);
}]; 

}

3、在销毁方法中取消通知

- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

4、拖动tableView取消键盘

#pragma mark - scrollView的代理方法 - 《UITableViewDelegate -》 UIScrollViewDelegate

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
//退出键盘
[self.view endEditing:YES];

 }

5.点击cell 取消键盘:如果直接在控制器中加入这句没有用,会被截获,需要为Scrollview添加一个类目

@implementation UIScrollView (UITouch)

//UIView的Touch事件被UIScrollview捕获了,所以UIView里面的Touch事件没有响应——————解决方法:将UIScrollview的捕获的Touch事件往上传;————给UIScrollview添加类别

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //从scrollview - view,所以用superview.superview 
   [self.superview.superview endEditing:YES];

}

@end

实例二:在TableView上模仿QQ拖拽弹出键盘

原理:通过tableView的偏移量

1.获取最后一行tableView的偏移量

//在控制器中添加获取表格视图最大偏移量的属性
@property (nonatomic, assign) CGFloat maxContentOffset;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//.........
    if (indexPath.row == self.messageFrames.count - 1) {
        //记录滑动到最后一行的偏移量
        self.maxContentOffset = tableView.contentOffset.y;
         NSLog(@"row:%lf",self.maxContentOffset);
    }


    //3.返回cell
    return cell;


}
  1. 通过偏移量来计算是否滚动到最下边,和快速滚动,用力网上拖可以弹出键盘
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //通过偏移量来计算是否滚动到最下边,和快速滚动,用力网上拖可以弹出键盘
    if (scrollView.contentOffset.y > (self.maxContentOffset + 160) && self.maxContentOffset != 0){
         [self.messageTextField becomeFirstResponder];


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值