IOS之键盘隐藏方法

这篇博客总结了在iOS应用中隐藏键盘的三种方法:1) 利用UITextField的DidEndOnExit事件;2) 点击Return后自动切换到下一个TextField;3) 通过点击背景或手势隐藏键盘。对于第三种方法,介绍了将背景View设为UIControl或使用手势识别的方式来实现键盘的隐藏。

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

总结一下IOS隐藏键盘的几种方法。


一、隐藏自身软键盘

UITextField可以通过点击“Return”来隐藏自身软键盘的情况,这时最好的办法就是使用DidEndonExit事件,因为当点击软键盘右下角的@“Return”按钮之后,会触发该事件。

首先,应该先声明当该事件被触发后我们需要进行何种操作。

[_textField addTarget:self action:@selector(hideTextField:) forControlEvents:UIControlEventEditingDidEndOnExit];

然后,在对应的函数中完成隐藏键盘的操作。

- (void)hideTextField:(id)sender
{
    [_textField resignFirstResponder];
}

这就完成了软键盘的隐藏。


二、点击Return按钮后自动转换到下一个TextField文本

当我们在一个页面中有多个TextFiled文本时,我们可以将隐藏自身键盘的操作修改为自动转换到下一个文本框的操作。

当然,要实现这一功能我们需要做一些修改。

首先,最好将页面中所有的TextFiled对象放在一个数组中。

然后给数组中的每个TextField对象添加触发事件:

for (UITextField* inputTextField in _textFieldArray) {
    [inputTextField addTarget:self action:@selector(nextTextField:) forControlEvents:UIControlEventEditingDidEndOnExit];
}
这样每个TextField在用户点击“Return”按钮之后都会调用"nextTextField:"方法。

最后我们将实现”nextTextField:“函数

- (void)nextTextField:(id)sender
{
    UITextField* textField = (UITextField*)sender;
    NSInteger index = [_textFieldArray indexOfObject:textField];
    if (index < _textFieldArray.count) {
        UITextField* nextTextField = [_textFieldArray objectAtIndex:(index + 1)];
        [nextTextField becomeFirstResponder];
    } else {
        [textField resignFirstResponder];
    }
}

这就完成了转换下一个文本框的功能。


三、轻触背景隐藏软键盘

这样的情况下有两种实现方法:

1、将背景View的Class修改为UIControl,它就能像UIButton一样触发Touch事件,设置到对应的事件调用[textField resignFirstResponder]即可。

2、利用手势来完成

      首先,在TextFiled被声明后给它添加如下代码:

[inputTextField addTarget:self action:@selector(showKeyboard:) forControlEvents:UIControlEventEditingDidBegin];

这就能使得当用户点击这个TextFiled的同时系统会调用”showKeyboard:“方法。

接下来,我们就在”showKeyboard:“方法为TextField添加手势。

- (void)showKeyboard:(id)sender
{
    [self.view addGestureRecognizer:_tapGestureRecognizer];
}

而我们事先在对_tapGestureRecognizer声明时会让它触发”hideKeyboard“方法。

_tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard:)];

所以,当用户轻触背景之后就会触发系统调用”hideKeyboard“方法:

- (void)hideKeyboard:(id)sender
{
    [self.view removeGestureRecognizer:_tapGestureRecognizer];
    for (UITextField* inputTextField in _textFieldArray) {
        [inputTextField resignFirstResponder];
    }
}

四、在键盘上方添加一个工具条,利用工具条实现隐藏键盘功能。

1、创建一个类,命名为KeyboardTopBar。

      在KeyboardTopBar.h中添加声明

@property (nonatomic, strong) UIToolbar* view;
@property (nonatomic, strong) NSMutableArray* textFields;
@property (nonatomic, strong) UIBarButtonItem* preButtonItem;
@property (nonatomic, strong) UIBarButtonItem* nextButtonItem;
@property (nonatomic, strong) UIBarButtonItem* hiddenButtonItem;
@property (nonatomic, strong) UIBarButtonItem* spaceButtonItem;

- (id)init;
- (void)hiddenKeyboard;
- (void)showBar:(UITextField*)textField;
   

      声明完成之后就是开始编写相关代码啦

      首先,先进行初始化:

      

- (id)init
{
    if (self = [super init]) {
        _preButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"上一项" style:UIBarButtonItemStyleBordered target:self action:@selector(showPrevious:)];
        _nextButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"下一项" style:UIBarButtonItemStyleBordered target:self action:@selector(showNext:)];
        _spaceButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
        _hiddenButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"隐藏键盘" style:UIBarButtonItemStyleBordered target:self action:@selector(hiddenKeyboard:)];
        
        _view = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 480, 320, 44)];
        _view.barStyle = UIBarStyleBlackTranslucent;
        _view.items = [NSArray arrayWithObjects:_preButtonItem,_nextButtonItem,_spaceButtonItem,_hiddenButtonItem, nil];
        _textFields = nil;
    }
    return self;
}
完成初始化之后就是这个类中两个最核心的函数啦

- (void)showBar:(UITextField*)textField
{
    _view.items = [NSArray arrayWithObjects:_preButtonItem,_nextButtonItem,_spaceButtonItem,_hiddenButtonItem, nil];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3f];
    _view.frame = CGRectMake(0, 201, 320, 44);
    [UIView commitAnimations];
}

- (void)hiddenKeyboard
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3f];
    _view.frame = CGRectMake(0, 480, 320, 44);
    [UIView commitAnimations];
}

到此,在KeyBoardTopBar中要完成的工作已经结束。

当我们要使用这个类时只需要在适当的位置声明它,并将他的view添加到当前view上:

    _keyBoardTopBar = [[KeyBoardTopBar alloc] init];
    [_keyBoardTopBar.textFields addObject:_textField];
    [self.view addSubview:_keyBoardTopBar.view];
当然,为了能让工具条出现还需要在textField被Editing时显示toolBar:

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    [_keyBoardTopBar showBar:_textField];
    //KeyBoardTopBar的实例对象调用显示键盘方法
}


所有的隐藏键盘的方法到此就整理结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值