当UITextField被系统键盘挡住的时候如何解决

例子如下:

首先.h文件继承UITextFieldDelegate 协议

#import <UIKit/UIKit.h>
#import "MainViewController.h"

@interface LoginViewController : UIViewController<MainDelegate,<span style="color:#FF0000;">UITextFieldDelegate</span>>

@property (nonatomic,strong) id <MainDelegate>delegate;

@end

.m文件中为 textField 变量设置 delegate =  self

#import "LoginViewController.h"


@interface LoginViewController ()
@property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *password;

@end

@implementation LoginViewController

- (void)viewDidLoad {
    

    [_password setSecureTextEntry:YES];
    _username.delegate = self;
    _password.delegate = self;

然后 实现 UITextFieldDelegate 中的三个方法

    //开始编辑输入框的时候,软键盘出现,执行此事件 
    -(void)textFieldDidBeginEditing:(UITextField *)textField 
    { 
        CGRect frame = textField.frame; 
        int offset = frame.origin.y + 32 - (self.view.frame.size.height - 216.0);//键盘高度216 
         
        NSTimeInterval animationDuration = 0.30f; 
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil]; 
        [UIView setAnimationDuration:animationDuration]; 
         
        //将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示 
        if(offset > 0) 
            self.view.frame = CGRectMake(0.0f, -offset, self.view.frame.size.width, self.view.frame.size.height); 
         
        [UIView commitAnimations]; 
    } 
     
    //当用户按下return键或者按回车键,keyboard消失 
    -(BOOL)textFieldShouldReturn:(UITextField *)textField 
    { 
        [textField resignFirstResponder]; 
        return YES; 
    } 
     
    //输入框编辑完成以后,将视图恢复到原始状态 
    -(void)textFieldDidEndEditing:(UITextField *)textField 
    { 
        self.view.frame =CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
    }  

搞定

番外篇

如何点击Return自动转到下个文本框

回到storyboard,右击账号文本框(nameTextField)弹出面板,按住Did End on Exit事件旁边的圆圈,然后拖曳到右侧.h文件的空白地方,此时会弹出一个对话框给方法命名。输入名称 (nameTextField_DidEndOnExit)后回车确定,便自动生成了该事件方法。

随后按照同样的做法,为密码文本框(passTextField)的Did End on Exit事件连接方法(passTextField_DidEndOnExit)。

来到.m文件,填写具体代码——

例:

//点击keyboard return键自动转入下一个textfield
- (IBAction)name_DidEndOnExit:(id)sender {
    [self.password becomeFirstResponder];
}

//在最后一个textfield,点击return键 关闭keyboard
- (IBAction)pwd_DidEndOnExit:(id)sender {
    [sender resignFirstResponder];
    //下面这句代码目的:在最后一个textfield 点击return后 自动执行下面login button 的 action
    [self.loginBtn sendActionsForControlEvents:UIControlEventTouchUpInside];
}

轻触背景隐藏软键盘

只能通过Return关闭软键盘太不灵活了,应该提供轻触背景隐藏软键盘的功能。

在storyboard,点击背景View,将它的Custom Class设置为UIControl,这样才会出现Touch Down事件。

右击背景View弹出面板,按住Touch Down事件旁边的圆圈,然后拖曳到右侧.h文件的空白地方建立该事件的处理方法。

来到.m文件,填写具体代码——

例:

//当点击textfield 之外的地方关闭keyboard
- (IBAction)view_DidEndOnExit:(id)sender {
    [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值