点击键盘,控件上移的方式

点击键盘,被挡住的控件的上移,回收键盘,控件回到原处,要实现这个功能,共有两种方法

一:(通知中心,监听键盘的弹起和回收)

1.监听键盘的弹起

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

2.监听弹起的时候的触发方法,用UIView的动画效果实现

// 键盘弹起的时候触发方法
- (void)keyBoardWillAppear:(NSNotification *)notification{
    NSLog(@"键盘弹起了");
    // 找到键盘的尺寸
    CGRect rect = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
#warning 整体打印结构体的方法
    NSLog(@"%@", NSStringFromCGRect(rect));
#warning 用动画效果让改变view的frame
    // 用UIView的动画,让视图随键盘向上平移
    [UIView animateWithDuration:0.2 animations:^{
        self.myView.frame = CGRectMake(100, 600 - rect.size.height, 200, 50);
    }];
}

3.监听键盘的回收

 // 监听键盘的回收
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillHidden:) name:UIKeyboardWillHideNotification object:nil];

4.键盘回收的时候实现的方法

(1)点击空白回收键盘

// 点击空白处回收键盘
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    [self.textField resignFirstResponder];
}

(2)控件回到原处(view的动画效果, 可以再点击空白处回收键盘里实现,注意时间需要改成0.2)

// 让view回到原来的位置
- (void)keyBoardWillHidden:(NSNotification *)notification{
    // 也可以在touch里写(在touch的方法里写,时间需要注意)
    [UIView animateWithDuration:2 animations:^{
        self.myView.frame = CGRectMake(100, 600, 200, 50);
    }];

}

二:textField的协议方法

// 监控当前的状态
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    NSLog(@"编辑开始");
    
    CGFloat height = textField.center.y - HEIGHT / 2;
    if (height > 0) {
        self.view.center = CGPointMake(self.view.center.x, HEIGHT / 2 - height);
    }
       return YES;
}

// 结束编辑
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    CGFloat heigth = textField.center.y - HEIGHT / 2;
    if (heigth > 0) {
        self.view.center = CGPointMake(self.view.center.x, self.view.center.y + heigth);
    }
    return YES;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值