UI:自定义键盘的实现

时间:2021-12-06 09:21:51

自定义我的封装键盘,并在试图控制器里对接 (解决多 输入框问题,把输入框存入到可变数组)

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible]; CSKeyBoardViewController * RootVC = [[CSKeyBoardViewController alloc]init];
self.window.rootViewController = RootVC;
[RootVC release];
return YES;
}

main.m

//
// CSKeyBoardViewController.m
//
#import "CSKeyBoardViewController.h"
#import "KeyBoard.h" @interface CSKeyBoardViewController ()<UITextFieldDelegate>
@property(nonatomic,retain)UITextField * tf,*tf1,*tf2;
@property(nonatomic,retain)KeyBoard * keyboard;
@property(nonatomic,retain)NSTimer * timer;
@property(nonatomic,retain)NSMutableArray * tfArr; @end @implementation CSKeyBoardViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. UITextField * textfield = [[UITextField alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width-, )];
NSLog(@"外面%@",textfield);
textfield.placeholder = @"请输入资料";
[self.view addSubview:textfield];
textfield.layer.borderWidth = ;
textfield.layer.cornerRadius = ;
textfield.delegate = self; //如果控制器里有好多的 tf 怎么办 <尚未解决 ????????????????>
// self.timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(textFieldDidBeginEditing:) userInfo:nil repeats:NO];
// 新问题 timer 不知道怎么关闭
UITextField * textfield2 = [[UITextField alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width-, )];
NSLog(@"外面2%@",textfield2);
textfield2.placeholder = @"请输入资料";
[self.view addSubview:textfield2];
textfield2.layer.borderWidth = ;
textfield2.layer.cornerRadius = ;
textfield2.delegate = self; self.tf1 = [[UITextField alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width-, )];
_tf1.placeholder = @"请输入资料";
[self.view addSubview:_tf1];
_tf1.layer.borderWidth = ;
_tf1.layer.cornerRadius = ;
_tf1.delegate = self; self.tf2 = [[UITextField alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width-, )];
_tf2.placeholder = @"请输入资料";
[self.view addSubview:_tf2];
_tf2.layer.borderWidth = ;
_tf2.layer.cornerRadius = ;
_tf2.delegate = self; self.tfArr = [NSMutableArray arrayWithCapacity:];
[_tfArr addObject:textfield];
[_tfArr addObject:textfield2];
[_tfArr addObject:_tf1];
[_tfArr addObject:_tf2]; NSDate * dateNow = [NSDate date];
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString * dateString = [formatter stringFromDate:dateNow];
KeyBoard * keyboard = [[KeyBoard alloc]initWithFrame:CGRectMake(, , , ) accessoryText:dateString TextFieledArr:_tfArr];
textfield.inputView = keyboard;
textfield2.inputView = keyboard;
_tf1.inputView = keyboard;
_tf2.inputView = keyboard;
[keyboard release];
[textfield release];
[textfield2 release];
[_tf1 release];
[_tf2 release];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//如果控制器有多个 tf 我们让当前鼠标所在的tf 指向 self.tf
-(void)textFieldDidBeginEditing:(UITextField *)textField{
self.tf = textField; //解决多 tf 问题 (属性)
// self.keyboard = [[KeyBoard alloc]initWithFrame:CGRectMake(0, 150, 375, 240) accessoryText:@"我的键盘" TextFieled:self.tf]; // NSLog(@"如果控制器有多个 tf 我们让当前鼠标所在的tf 指向 self.tf %@------%@",self.tf,textField);
//站换思路 用数组
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"来自视图控制器 移动了鼠标");
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
for (UITextField * tf in self.tfArr) {
[tf resignFirstResponder];
}
[_tf resignFirstResponder];//这里没有什么卵用才用上面的数组释放键盘
NSLog(@"试图控制器回收键盘");
} @end

试图控制器(m)文件 CSKeyBoardViewController.m

#import <UIKit/UIKit.h>

@interface KeyBoard : UIView<UITextFieldDelegate,UIAlertViewDelegate>
//共外界使用的辅助视图
@property(nonatomic,retain)UILabel * accessorView;
//存储当前的输入框
@property(nonatomic,retain)UITextField * tf; /**
* methods for :
外部调用初始化方法创建自定义键盘视图同时可设置辅助视图显示文字 指定为外部输入框的inputView 同时可指定辅助视图(如需)(.accessoryView) 外部操作的输入框需赋值给该类的tf属性
*/ //初始化自定义键盘视图及设置辅助文字方法
//- (instancetype)initWithFrame:(CGRect)frame accessoryText:(NSString *)text
// TextFieled:(UITextField *)textfield; - (instancetype)initWithFrame:(CGRect)frame accessoryText:(NSString *)text
TextFieledArr:(NSMutableArray *)textfieldArr;;
//..待丰富... @end

自定义键盘.h封装好了 KeyBoard.h

//
// KeyBoard.m #define RandomColor [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0] #import "KeyBoard.h" @implementation KeyBoard -(instancetype)initWithFrame:(CGRect)frame accessoryText:(NSString *)text TextFieledArr:(NSMutableArray *)textfieldArr{
self = [super initWithFrame:frame];
if (self) {
[self setUpCustomViewWithAccessoryText:text TextFieledArr:textfieldArr];
}
return self;
} -(void)setUpCustomViewWithAccessoryText:(NSString *)accesssoryText
TextFieledArr:(NSMutableArray *)textfieldArr{
NSLog(@"里面%@",textfieldArr);
self.backgroundColor = RandomColor;
for (UITextField * tf in textfieldArr) {//遍历外面的 textfield
tf.delegate = self;
} self.tf.delegate = self;
//键盘辅助视图
self.accessorView = [[UILabel alloc]initWithFrame:CGRectMake(, , self.frame.size.width, )];
_accessorView.backgroundColor = RandomColor;
_accessorView.text = accesssoryText;
_accessorView.textAlignment = NSTextAlignmentCenter;
_accessorView.textColor = RandomColor;
[self addSubview:_accessorView];
//自定义按钮事件
NSArray * KeyArr = @[@[@"",@"",@""],@[@"",@"",@""],@[@"",@"",@""],@[@"✔️", @"", @"