OC 基础 UITextField
一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
1.属性
属性 | 注释 |
---|---|
frame | 约束 |
text | 设置默认文本 |
textColor | 设置文本颜色 |
textAlignment | 设置对齐方式 |
font | 设置文本样式和大小 |
borderStyle | 设置textFild边框 |
placeholder | 设置提示文本 |
enabled | 设置textField不可编辑 |
clearButtonMode | 显示本文清空按钮 |
clearsOnBeginEditing | 开始编辑是是否删除原有的内容 |
secureTextEntry | 设置编辑框中的内容密码显示 |
keyboardType | 设置键盘上的样式 |
returnKeyType | 设置键盘上return键的类型 |
leftView | 添加左视图 |
delegate | 代理 |
1.使用
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 150, 30)];
[self.view addSubview:textField];
//设置默认文本
textField.text = @"请输入文本内容";
//设置文本颜色
textField.textColor = [UIColor redColor];
//设置对齐方式
textField.textAlignment = NSTextAlignmentCenter;
//设置文本样式和大小
textField.font = [UIFont fontWithName:@"wawati sc" size:20];
//设置textFild边框
textField.borderStyle = UITextBorderStyleRoundedRect;
//设置提示文本
textField.placeholder = @"请输入文本内容";
//设置textField不可编辑
textField.enabled = YES;
//显示本文清空按钮
textField.clearButtonMode = UITextFieldViewModeAlways;
//开始编辑是是否删除原有的内容
textField.clearsOnBeginEditing = YES;
//设置编辑框中的内容密码显示
textField.secureTextEntry = YES;
//设置键盘上的样式
textField.keyboardType = UIKeyboardTypeNamePhonePad;
//设置键盘上return键的类型
/**UIReturnKeyDefault,UIReturnKeyGo,UIReturnKeyGoogle,UIReturnKeyJoin,UIReturnKeyNext,UIReturnKeyRoute,UIReturnKeySearch,UIReturnKeySend,UIReturnKeyYahoo,UIReturnKeyDone,UIReturnKeyEmergencyCall,UIReturnKeyContinue,*/
textField.returnKeyType = UIReturnKeySearch;//添加左视图 还可以添加右视图(不举例子)
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
leftView.backgroundColor = [UIColor grayColor];
textField.leftView = leftView;//代理
textField.delegate = self;#pragma mark - 开始编辑
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{return YES;
}#pragma mark - 已经编辑
- (void)textFieldDidBeginEditing:(UITextField *)textField{}#pragma mark - 结束编辑
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{return YES;
}#pragma mark - 已经结束编辑-1
- (void)textFieldDidEndEditing:(UITextField *)textField{}#pragma mark - 已经结束编辑-2
- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason API_AVAILABLE(ios(10.0)){}#pragma mark - 正在发生改变
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{return YES;
}#pragma mark - 已经发生改变
- (void)textFieldDidChangeSelection:(UITextField *)textField API_AVAILABLE(ios(13.0), tvos(13.0)){}#pragma mark - 点击删除按键
- (BOOL)textFieldShouldClear:(UITextField *)textField{return YES;
}#pragma mark - 点击返回按键
- (BOOL)textFieldShouldReturn:(UITextField *)textField{return YES;
}//取消编辑
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
3.需求
3.1输入框设置左边输入边距
self.textField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 8, 0)];
self.textField.leftViewMode = UITextFieldViewModeAlways;
3.2点击空白处收回键盘
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];
[self.view addGestureRecognizer:tap];
tap.numberOfTapsRequired=1;
tap.numberOfTouchesRequired=1;- (void)tap{[self.view endEditing:YES];
}
3.2进来页面默认TextField选中把键盘弹起来
[self.OfflineAdressTextField becomeFirstResponder];
3.3键盘设置
self.textField.keyboardType = UIKeyboardTypeNumberPad;
UIKeyboardTypeNumberPad(纯数字)
UIKeyboardTypeDefault(默认)
UIKeyboardTypeASCIICapable(英文)
UIKeyboardTypeNumbersAndPunctuation(搜狗数字)
UIKeyboardTypeURL(URL英文)
UIKeyboardTypePhonePad (算数 数字)
UIKeyboardTypeEmailAddress (Emil 英文)
UIKeyboardTypeDecimalPad(价格 数字)
UIKeyboardTypeTwitter
UIKeyboardTypeWebSearch
UIKeyboardTypeASCIICapableNumberPad
UIKeyboardTypeAlphabet
3.4实时获取输入的值
OC
#pragma mark - 正在发生改变
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{if (textField == self.OfflineAdressTextField) {self.adress = [textField.text stringByReplacingCharactersInRange:range withString:string];}else if(textField == self.OfflineUrlTextField){self.url = [textField.text stringByReplacingCharactersInRange:range withString:string];}
}
Swift
extension ShowAddView: UITextFieldDelegate {func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {let rag = textField.text?.toRange(range)self.title = textField.text?.replacingCharacters(in: rag!, with: string) ?? String()return true}
}extension String {func toRange(_ range: NSRange) -> Range<String.Index>?{guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }guard let from = String.Index(from16, within: self) else { return nil }guard let to = String.Index(to16, within: self) else { return nil }return from ..< to}
}
3.5 点击删除按键 监听把值清空
点击删除按键的时候,textfield已经把文本框的值已经清空了,我们只需要在监听的实现方法里面,把自定义保存文本的值也跟着清空就可以
[self.textField addTarget:self action:@selector(textFieldchange:) forControlEvents:UIControlEventEditingChanged];-(void)textFieldchange:(UITextField *)textField {NSLog(@"text: %@",textField.text);
}
3.6 监听当前输入框是否为空
注意:代理方法有一个缺点,它获取实时textField的值是监听键盘的删除按键,如果是textfield的清空文本按键清空输入框的文本是没有办法监听。要解决这个方法需要用方法二才能实时监听到值的变化
方法一:代理方法。
self.textField.delegate = self;<UITextFieldDelegate>- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{NSString *value = [textField.text stringByReplacingCharactersInRange:range withString:string];NSLog(@"value: %@",value);return YES;
}
方法二:监听方法
[self.textField addTarget:self action:@selector(textFieldchange:) forControlEvents:UIControlEventEditingChanged];-(void)textFieldchange:(UITextField *)textField {NSLog(@"text: %@",textField.text);
}
3.7 禁止复制粘贴
之前我写过一遍文章
禁止复制粘贴
3.8 自定义删除文本按键
//自定义 textField 的清除按钮
UIButton *clearBtn = [self.textField valueForKey:@"_clearButton"];
[clearBtn setImage:[UIImage imageNamed:@"home_search_normal"] forState:UIControlStateNormal];
3.9限制输入个数
extension ShowAddView: UITextFieldDelegate {func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {let rag = textField.text?.toRange(range)let text = textField.text?.replacingCharacters(in: rag!, with: string) ?? String()if text.count > 60 {return false} else {self.fileName = text//在范围内才赋值return true}}
}
extension String {func toRange(_ range: NSRange) -> Range<String.Index>?{guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }guard let from = String.Index(from16, within: self) else { return nil }guard let to = String.Index(to16, within: self) else { return nil }return from ..< to}
}
3.10 自动获取焦点(默认让键盘弹起)
swift
textField.becomeFirstResponder()
OC
[textField becomeFirstResponder];
3.11 如何设置testField提示语的颜色和大小
Swift
textField.attributedPlaceholder =NSAttributedString.init(string:ActivationCodeTitle,attributes: [NSAttributedString.Key.foregroundColor:BaseRedDeepColor,NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)])
4.如何实时监听到textFeild是否获取焦点和失去焦点
需求:当时NML注册的时候,一旦失去焦点,说明输入完,就去请求网络,看看输入的机构码是否正确,如果不正确.
OC 基础 UITextField相关推荐
- OC基础第四讲--字符串、数组、字典、集合的常用方法
OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...
- OC基础回想(十二)协议
在OC基础(十一)中我们讨论了类别和非正式协议的奇异之处.在使用非正式协议时.能够仅仅实现你想要获得响应的方法.也不必在对象中声明不论什么内容来表示该对象可用作托付对象. 全部这些任务能够用最少的代码 ...
- OC基础 代理和协议
OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议 ...
- OC基础1:一些基本概念
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.关于类方法和实例方法: (1).类方法 ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- oc基础 不可变字符串的创建和使用
oc基础 不可变字符串的创建和使用 简介:下面都是字符串基本用法. 1.字符串的创建 //创建oc常量字符串NSString *str=@"hello world!";NSLog ...
- iOS开发面试知识整理 – OC基础 (二)
iOS | 面试知识整理 – OC基础 (二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言 ...
- OC基础学习 调用方式
OC基础学习 调用方式 调用方法: C++里,送一个消息给对象(或者说调用一个方法)的语法如下: obj.method(argument); Objective-C则写成: [obj method: ...
- iOS战记 ----OC基础语法之战(一)
iOS战记 ----OC基础语法之战(一) 一个机械设计者的转行之战. 火车一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面 ...
最新文章
- 史上最全的高可用服务系统线上问题排查工具单(一)
- python3爬取带密码的网站_Python3 爬取网站收藏数超过70的 情侣网名
- TikTok:将禁止加密货币广告投放
- Linux_I2C读写流程
- 优先经验回放(Prioritized Experience Replay)
- AUTOCAD——标注关联
- transcad安装教程_TransCAD免安装版
- 窥探PTAM之Mapping线程
- 三阶魔方还原步骤图_三阶魔方七步还原法口诀,魔方新手入门图解步骤
- uniapp:H5页面长按识别二维码
- 2019迅雷校园招聘!后端工程师岗位两次技术面题目总结和解析
- Java 使用poi-tl下载Word
- C#输出Word文档
- TreeView详解
- c中将三个整数取平均值,结果保留两位小数
- 如何快速实现MindMapper分类的整理
- python01串_python初学者日记01(字符串操作方法)
- 【论文阅读】Regional Semantic Contrast and Aggregation for Weakly Supervised Semantic Segmentation
- web图片铺满网页_CSS中如何设拉伸背景图片铺满屏幕
- PAT Basic 1014
热门文章
- Speedoffice——YEAR(NOW())函数公式如何使用
- 简单的病毒编程代码Python,利用python编写勒索病毒
- android 将手机号中间隐藏为星号(*)和手机号码判断
- Babylon.js 拾取坐标的方法
- 怎么利用Xshell 上传文件到Centos7 Xshell怎么上传文件
- mysql cbo rbo_Oracle优化器(RBO与CBO)
- Excel部分单元格不能编辑,什么原因?怎么做到的?
- 标题相似度算法_智能客服问题相似度算法设计——第三届魔镜杯大赛第12名解决方案...
- 我猜,每个程序员对着电梯都想过调度算法吧!
- Flash版(迷你音乐播放器mp3Player1.0 Beta1 )附源码