关于iOS不同类型键盘的切换

本文介绍如何在iOS应用中实现自定义pickerView键盘与系统默认键盘之间的无缝切换,并提供了详细的代码实现。

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

闲言少叙,立马入正题。。。

开发中用pickerView自定义的键盘与系统默认的键盘之间的切换。希望能帮到要用的朋友。。。

  1 #import "ViewController.h"
  2 
  3 @interface ViewController () <UITextViewDelegate, UITextFieldDelegate, UIPickerViewDelegate>
  4 
  5 @property (weak, nonatomic) IBOutlet UITextField *textField;
  6 @property (weak, nonatomic) IBOutlet UITextView *textView;
  7 
  8 /** 自定义键盘 */
  9 @property (nonatomic, strong) UIPickerView *pickerView;
 10 
 11 /** 原因数组 */
 12 @property (nonatomic, strong) NSArray *reasonArray;
 13 
 14 /** 如果是第一次则直接保存值,否则不保存 */
 15 @property (nonatomic, assign) BOOL isFirst;
 16 
 17 @end
 18 
 19 @implementation ViewController
 20 
 21 - (IBAction)click:(id)sender {
 25     [self.textField resignFirstResponder];
 27 }
 28 
 29 - (void)viewDidLoad {
 30 
 31     [super viewDidLoad];
 33     self.textView.delegate = self;
 35     self.textField.delegate = self;
 37     self.textField.inputView = self.pickerView;
 39 }
 40 
 41 - (void)viewDidAppear:(BOOL)animated {
 43     [super viewDidAppear:animated];
 45     [self.textField becomeFirstResponder];
 47 }
 48 
 49 - (void)viewDidDisappear:(BOOL)animated {
 51     [super viewDidDisappear:animated];
 53     [self.textField resignFirstResponder];
 55 }
 56 
 57 /*****************************************/
 58 #pragma mark - UITextViewDelegate
 59 
 60 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
 64     [self.textField resignFirstResponder];
 66     self.textField.enabled = NO;
 68     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 70         [textView becomeFirstResponder];
 72     });
 74     return YES;
 76 }
 77 
 78 - (void)textViewDidBeginEditing:(UITextView *)textView {
 80     self.textField.enabled = YES;
 82 }
 83 
 84 #pragma mark - UITextFieldDelegate
 85 
 86 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
 88     // 切换键盘
 90     [self.textView resignFirstResponder];
 92     self.textView.editable = NO;
 94     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 96         [textField becomeFirstResponder];
 98     });
101     if (_isFirst) {
103         [self pickerView:self.pickerView didSelectRow:0 inComponent:1];
105         _isFirst = NO;
107     }
109     return YES;
111 }
112 
113 - (void)textFieldDidBeginEditing:(UITextField *)textField {
115     self.textView.editable = YES;
117 }
118 
119 // 不允许用户输入
121 - (BOOL)texttitleField:(UITextField *)texttitleField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
123     return NO;
125 }
126 
127 /*******************切换键盘**********************/
128 #pragma mark - UIPickerViewreasonArraySource
130 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
132     return 1;
134 }
135 
136 // 行数
137 
138 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
140     return self.reasonArray.count;
142 }
143 
144 #pragma mark - UIPickerVeiwDelegate
145 
146 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
148     return self.reasonArray[row];
150 }
151 
152 // 选中某一行
153 
154 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {  
156     self.textField.text = self.reasonArray[row];
158 }
159 
160 #pragma mark - 懒加载
161 
162 - (UIPickerView *)pickerView {
164     if (!_pickerView) {
166         _pickerView = [[UIPickerView alloc] init];
168         _pickerView.backgroundColor = [UIColor lightGrayColor];
170 //        _pickerView.backgroundColor = [UIColor whiteColor];
172         _pickerView.delegate = self;
174     }
176     return _pickerView;
178 }
179 
180 - (NSArray *)reasonArray {
182     if (!_reasonArray) {
184         _reasonArray = @[@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311",@"121313311"];
186     }
188     return _reasonArray;
190 }

 

转载于:https://www.cnblogs.com/liuchunlao/p/4299617.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值