首页 > 代码库 > iOS_8_键盘的简单处理

iOS_8_键盘的简单处理

最终效果图:





BeyondViewController.h

//
//  BeyondViewController.h
//  9_键盘的简单处理
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <span style="font-family: Arial, Helvetica, sans-serif;"><UIKit/UIKit.h></span>
@interface BeyondViewController : UIViewController
- (IBAction)exitKeyboard:(UIButton *)sender;

@end

</uikit>





BeyondViewController.m

//
//  BeyondViewController.m
//  9_键盘的简单处理
/*
    存在的问题:
    1,弹出的键盘可能会遮住界面上的控件,解决方法:使用scrollView,或,动态减少控件的Y值(使之上移)
    2,toolBar上面的两个按钮的点击事件,还没有实现
 */
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondViewController.h"

@interface BeyondViewController ()
{
    // 键盘上面的附属工具条
    UIToolbar *_toolBar;
}
@end

@implementation BeyondViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 为所有键盘上面添加工具条
    [self addToolBarForKeyboard];
}
// 为所有键盘上面添加工具条
- (void)addToolBarForKeyboard
{
    // mainBundel加载xib,扩展名不用写.xib
    NSArray *arrayXibObjects = [[NSBundle mainBundle] loadNibNamed:@"KeyToolBar" owner:nil options:nil];
    // 键盘附属工具条
    _toolBar = arrayXibObjects[0];
    // 为self.view内部的所有文本输入框设置toolBar
    NSArray *array = self.view.subviews;
    for (UIView *obj in array) {
        if ([obj isKindOfClass:[UITextField class]]) {
            // 为什么要强转,因为UIView的属性 inputAccessoryView 是readOnly
            UITextField *obj2 = (UITextField *)obj;
            obj2.inputAccessoryView = _toolBar;
        }
    }
    
    // 为toolBar中的第1个UIToolbarTextButton(上一个按钮)添加点击事件
    //[[_toolBar.subviews firstObject] addTarget:self action:@selector(previousKeyboard:) forControlEvents:UIControlEventTouchUpInside];
    
    // 为toolBar中的第2个UIToolbarTextButton(下一个按钮)添加点击事件
    //[[_toolBar.subviews objectAtIndex:2] addTarget:self action:@selector(nextKeyboard:) forControlEvents:UIControlEventTouchUpInside];
    
    // 为toolBar中的最后一个UIToolbarTextButton(完成按钮)添加点击事件
    [[_toolBar.subviews lastObject] addTarget:self action:@selector(exitKeyboard:) forControlEvents:UIControlEventTouchUpInside];
}
// toolBar里面,点击上一个按钮
- (void)previousKeyboard:(UIButton *)sender
{
    NSLog(@"点击了上一个按钮,要激活上一个输入框");
}
// toolBar里面,点击下一个按钮
- (void)nextKeyboard:(UIButton *)sender
{
    NSLog(@"点击了下一个按钮,要激活下一个输入框");
}

// 退出键盘
- (IBAction)exitKeyboard:(UIButton *)sender {
    // 方式1: self.view内部所有的文本框(包括子孙控件...)都退出第一响应者
    [self.view endEditing:YES];
    return;
    
    // 方式2:
    // 遍历uiview里面所有的控件 ,resignFirstResponder
    /*
        for (int i=0; i<self.view.subviews.count; i++) {
            [self.view.subviews[i] resignFirstResponder];
        }
     */
    NSArray *array = self.view.subviews;
    for (UIView *obj in array) {
        if ([obj isKindOfClass:[UITextField class]]) {
            [obj resignFirstResponder];
        }
    }
    
    // 方式3:
    // 在self.view的最开头,铺一个全屏的透明的按钮,连线,只要在屏幕空白区域点击后,就可以调用上面的方式1,退出键盘
    
    
}

@end





KeyToolBar.xib