UI:自定义键盘的实现
自定义我的封装键盘,并在试图控制器里对接 (解决多 输入框问题,把输入框存入到可变数组)
@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 = @[@[@"",@"",@""],@[@"",@"",@""],@[@"",@"",@""],@[@"✔️", @"", @"UI:自定义键盘的实现的更多相关文章
- UI:登录窗的自定义键盘
在创建一个自定义键盘的时候遇到的错误 //双重for循环,对于Button上的数字用二维数组 // NSArray * butArr[4][3] = {@[@"1",@&qu ...
- WPF 自定义键盘焦点样式(FocusVisualStyle)
WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌.这时,其自带的键盘焦点样式(FocusVisualSt ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- 原生HTML5 input type=file按钮UI自定义
原生<input type="file" name="file" />长得太丑 提升一下颜值 实现方案一.设置input[type=file]透明度 ...
- ios 自定义键盘
由于项目需要,需要自定义键盘.ios系统键盘会缓存键盘输入,并保存在系统目录下的文件里,并且是明文存储,存在帐号密码泄漏风险.在别人代码基础上修改了下,美化了下界面,去掉了字符输入,加了点击特效,截图 ...
- Vue2.0的变化 ,组件模板,生命周期,循环,自定义键盘指令,过滤器
组件模板: 之前: <template> <h3>我是组件</h3><strong>我是加粗标签</strong> </templat ...
- vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...
- swift3.0 自定义键盘
...绕了一大圈,又绕回原生来了,今天,学习一下swift3.0语法下的自定义键盘.效果图如下: 其实,很简单,只需要把UITextView(或者UITextField)的inputView属性设置为 ...
- vue教程2-08 自定义键盘信息、监听数据变化vm.$watch
vue教程2-08 自定义键盘信息 @keydown.up @keydown.enter @keydown.a/b/c.... 自定义键盘信息: Vue.directive('on').keyCode ...
随机推荐
- [转载] FFmpeg API 变更记录
最近一两年内FFmpeg项目发展的速度很快,本来是一件好事.但是随之而来的问题就是其API(接口函数)一直在发生变动.这么一来基于旧一点版本的FFmpeg的程序的代码在最新的类库上可能就跑不通了. 例 ...
- ora-0000 normal跟/etc/hosts有关
当hosts文件配置错误时,用sqlplus登录后startup nomount,就会报错ORA-00000 [oracle11g@testdb2 dbs]$ sqlplus "/ as s ...
- js对象的引用
/*var a = [1,2,3]; var b = [1,2,3]; alert( a == b ); //false*/ //基本类型:赋值的时候只是值得复制 /* var a = 5; var ...
- 看来ms sql server if 中定义个变量出了if 还是可以用的
begin declare @abc int; end print @abc 可以打出1出来
- PhoneGap与Jquery Mobile结合开发android应用配置
由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接触过,可以说是压根没听说过,真是感慨,在开发领域,技术日新月异,知识真是永远学 ...
- JQuery开发之Galleriffic图片插件介绍
Galleriffic是一个用于创建快速展示相册中照片的jQuery插件.从图一中可以看成,图片既可以以幻灯片的方式查看,也可以手动点击缩略图查看.Galleriffic还支持分页,从而使得它能够展示 ...
- js的预解析和代码执行相关规则
JavaScript解析过程分为两个阶段,一个是编译阶段,另外一个就是执行阶段. 1.编译阶段:又称为预解析阶段,在这个阶段JavaScript解释器将完成把JavaScript脚本代码转换到字节码. ...
- poj 1472(递归模拟)
题意:就是让你求出时间复杂度. 分析:由于指数最多为10次方,所以可以想到用一个数组保存各个指数的系数,具体看代码实现吧! 代码实现: #include<cstdio> #include& ...
- [转] C#中的Dictionary的使用
txw1958 的 原文 说明 必须包含名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键 ...
- XML Schema 简介
XML Schema 是基于 XML 的 DTD 替代者. XML Schema 可描述 XML 文档的结构. XML Schema 语言也可作为 XSD(XML Schema Definition) ...