iOS InputView 和 InutAccessoryView

一、InputAccessoryView

1、UITextFieldUITextView有一个InutAccessoryView的属性,当你想在键盘上展示一个自定义的view时,你就可以设置该属性。你设置的view就会自动和键盘keyboard一起显示了,需要注意的是,你所自定义的view既不应该处在其他视图层,也不应该成为其他视图的子视图。其实也就是说,你所自定义的view只要赋给InutAccessoryView就可以了,不要再做其他多余的操作。

2、我们在使用UITextFieldUITextView的时候,可以通过它们的InutAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。

3、但是当我们要操作的视图不是UITextFieldUITextView的时候,InutAccessoryView就变成了readonly的。这时我们如果还想再加InutAccessoryView,按API中的说法,就需要新建一个该视图的子类,并重新声明InutAccessoryView属性为readwrite的。比如我们要实现点击一个tableView的一行时,呼出一个UIPickerView,并且附加一个用于回收PickerViewtoolbar。因此我们自一个UITableViewCell类,并声明InutAccessoryViewinputViewreadwrite的,并且重写它们的get方法,这样在某个tableviewcell变成第一响应者时,它就会自动呼出inputViewInutAccessoryView


二、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

结果:
                 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值