iOS开发 键盘遮挡输入框(TextView、TextField)问题

本文介绍了在iOS开发中遇到键盘遮挡输入框(TextView、TextField)的问题,通过实现UITextFieldDelegate、UIGestureRecognizerDelegate、UITextViewDelegate三个协议,并在.m文件中编写相关代码来解决这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


首先在.h文件中要添加UITextFieldDelegate ,UIGestureRecognizerDelegate,UITextViewDelegate

 这三个协议。


下面是.m文件中的代码

     

- (void)viewDidLoad
{
    [super viewDidLoad];
    //指定本身为代理
    self.textfield.delegate = self;
    self.textView.delegate = self;
    //添加手势,点击屏幕其他区域关闭键盘的操作
    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidenKeyboard)];
    gesture.numberOfTapsRequired = 1;
    gesture.delegate = self;
    [self.view addGestureRecognizer:gesture];
}
//隐藏键盘的方法
-(void)hidenKeyboard
{
    [self.feedBackContent resignFirstResponder];
    [self.feedBackContact resignFirstResponder];
    [self resumeView];
}

//恢复原始视图位置
-(void)resumeView
{
    NSTimeInterval animationDuration=0.30f;
    [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
    [UIView setAnimationDuration:animationDuration];
    float width = self.view.frame.size.width;
    float height = self.view.frame.size.height;
    //如果当前View是父视图,则Y为20个像素高度,如果当前View为其他View的子视图,则动态调节Y的高度
    float Y = 0.0f;
    CGRect rect=CGRectMake(0.0f,Y,width,height);
    self.view.frame=rect;
    [UIView commitAnimations];
}


     解决textview遮挡键盘代码

//UITextView的协议方法,当开始编辑时监听
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    NSTimeInterval animationDuration=0.30f;
    [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
    [UIView setAnimationDuration:animationDuration];
    float width = self.view.frame.size.width;
    float height = self.view.frame.size.height;
    //上移70个单位,按实际情况设置
    CGRect rect=CGRectMake(0.0f,-70,width,height);
    self.view.frame=rect;
    [UIView commitAnimations];
    return YES;
}
     当然还要恢复屏幕

- (IBAction)textViewDidEndEditing:(UITextView *)textView {
    [self.textview resignFirstResponder];
    [self resumeView];
}

    解决textfield键盘退出代码,当然也要用到上面textviewDidEndEditing

//用于解决textview键盘退出问题
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
	{
    	    if ([text isEqualToString:@"\n"]) {
       	        [textView resignFirstResponder];
        	        return NO;
        	    }
    	    return YES; 
    }


    解决textfield遮挡键盘代码

//UITextField的协议方法,当开始编辑时监听
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    NSTimeInterval animationDuration=0.30f;
    [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
    [UIView setAnimationDuration:animationDuration];
    float width = self.view.frame.size.width;
    float height = self.view.frame.size.height;
    //上移30个单位,按实际情况设置
    CGRect rect=CGRectMake(0.0f,-180,width,height);
    self.view.frame=rect;
    [UIView commitAnimations];
    return YES;
}

    恢复屏幕,也是textfield键盘退出功能

- (IBAction)textFieldDoneEditing:(id)sender {
    [sender resignFirstResponder];
    [self resumeView];
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值