一、InputAccessoryView
1、UITextField和UITextView有一个InutAccessoryView的属性,当你想在键盘上展示一个自定义的view时,你就可以设置该属性。你设置的view就会自动和键盘keyboard一起显示了,需要注意的是,你所自定义的view既不应该处在其他视图层,也不应该成为其他视图的子视图。其实也就是说,你所自定义的view只要赋给InutAccessoryView就可以了,不要再做其他多余的操作。
2、我们在使用UITextField和UITextView的时候,可以通过它们的InutAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。
3、但是当我们要操作的视图不是UITextField或UITextView的时候,InutAccessoryView就变成了readonly的。这时我们如果还想再加InutAccessoryView,按API中的说法,就需要新建一个该视图的子类,并重新声明InutAccessoryView属性为readwrite的。比如我们要实现点击一个tableView的一行时,呼出一个UIPickerView,并且附加一个用于回收PickerView的toolbar。因此我们自一个UITableViewCell类,并声明InutAccessoryView和inputView为readwrite的,并且重写它们的get方法,这样在某个tableviewcell变成第一响应者时,它就会自动呼出inputView和InutAccessoryView;
二、InputView
1、inputView就是显示键盘的view,如果重写这个view则不再弹出键盘,而是弹出自己的view.如果想实现当某一控件变为第一响应者时不弹出键盘而是弹出我们自定义的界面,那么我们就可以通过修改这个inputView来实现,比如弹出一个日期拾取器。
2、inputView不会随着键盘出现而出现,设置了inputView只会当UITextField或者UITextView变为第一相应者时显示出来,不会显示键盘了。设置了InutAccessoryView,它会随着键盘一起出现并且会显示在键盘的顶端。InutAccessoryView默认为nil.
三、示例代码
#import "ViewController.h"
#define screenW [UIScreen mainScreen].bounds.size.width //屏幕宽度
#define screenH [UIScreen mainScreen].bounds.size.height //屏幕高度
@interface ViewController ()<UITextFieldDelegate>
@property (nonatomic, retain) UITextField * textField;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
[self createToolBar];
}
- (void)createToolBar {
// 定义一个toolBar
UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, screenW, 40)];
// 设置style
[topView setBarStyle:UIBarStyleBlack];
// 定义完成按钮
UIBarButtonItem * doneButton = [[UIBarButtonItem alloc]initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(resignKeyboard)];
// 在toolBar上加上这些按钮
NSArray * buttonsArray = @[doneButton];
[topView setItems:buttonsArray];
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, screenW, 250)];
label.text = @"InputView";
label.textAlignment = NSTextAlignmentCenter;
self.textField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, screenW - 100, 40)];
self.textField.delegate = self;
self.textField.placeholder = @"我是UITextField";
self.textField.borderStyle = UITextBorderStyleRoundedRect;
self.textField.inputView = label;
self.textField.inputAccessoryView = topView;
[self.view addSubview:self.textField];
}
// 隐藏键盘
-(void)resignKeyboard {
[self.textField resignFirstResponder];
}
@end
结果: