在UITextField中能看到两个属性:
@property (readwrite, retain) UIView *inputView;
@property (readwrite, retain) UIView *inputAccessoryView;
在UITextField称为第一相应者的时候,会弹出系统默认的键盘,那么有时候并不想让系统默认弹出键盘,而是弹出自己自定义的view这种情况下就用到了UITextField这个控件的inputView属性了,我们可以自定义view,使其成为点击textfield默认弹出的自定义view。那么inputAccessoryView是什么呢,踏实键盘的辅助视图,机键盘上面那部分,同样当对inputAccessoryView设置了自定义的view时,键盘弹出的同时,该view会作为辅助视图出现在键盘上面,和键盘一块弹出,默然情况下,inputview在下,inputAccessoryView在上面。
@interface ViewController ()
@property (nonatomic, strong) UITextField *textField;
@property (nonatomic, strong) UIView *customInputView;
@property (nonatomic, strong) UIToolbar *customAccessoryView;
@property (nonatomic, strong) UISearchBar *searchBar;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createUI];
}
- (void)createUI{
[self.view addSubview:self.textField];
self.textField.inputView = self.customInputView;
self.textField.inputAccessoryView = self.customAccessoryView;
}
- (UITextField *)textField{
if (!_textField) {
_textField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, SCREEN_BOUNDS.size.width - 100, 30)];
_textField.layer.borderWidth = 1.0;
_textField.layer.borderColor = [UIColor lightGrayColor].CGColor;
_textField.layer.cornerRadius = 4.0;
_textField.placeholder = @"测试";
}
return _textField;
}
- (UIView *)customInputView{
if (!_customInputView) {
_customInputView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_BOUNDS.size.width, 261)];
_customInputView.backgroundColor = [UIColor lightGrayColor];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, SCREEN_BOUNDS.size.width, 40)];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"自定义inputView";
[_customInputView addSubview:label];
// _customInputView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_BOUNDS.size.width, 300)];
// _customInputView.backgroundColor = [UIColor redColor];
}
return _customInputView;
}
- (UIToolbar *)customAccessoryView{
if (!_customAccessoryView) {
_customAccessoryView = [[UIToolbar alloc]initWithFrame:(CGRect){0,0,SCREEN_BOUNDS.size.width,40}];
_customAccessoryView.barTintColor = [UIColor orangeColor];
UIBarButtonItem *space = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *finish = [[UIBarButtonItem alloc]initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(done)];
[_customAccessoryView setItems:@[space,space,finish]];
}
return _customAccessoryView;
}
- (void)done{
[self.textField resignFirstResponder];
}
运行结果如图所示:
自定义inputview和inputAccessoryView这里不论改变_customInputView的高度,inputAccessoryView始终在inputView上面。
再看下面:
其运行结果如图所示:
inputAccessoryView被inputview盖住情况所以以后如果自定义UITextfield的inputview 那么千万不可吧pickview直接赋值给textfield的inputview否则会出现如图所示的bug。
网友评论