iOS最完美的UITextField中输入金额,只能输入数字和小数点,保留两位小数点且0放在首位
2016-06-14 18:35
781 查看
@property (nonatomic,
assign) BOOL isHaveDian;
@property (nonatomic,
assign) BOOL isFirstZero;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
if (textField ==
self.amountTextField) {
if ([textField.text
rangeOfString:@"."].location==NSNotFound)
{
_isHaveDian =
NO;
}
if ([textField.text
rangeOfString:@"0"].location==NSNotFound)
{
_isFirstZero =
NO;
}
if ([string
length]>0)
{
unichar single=[string
characterAtIndex:0];//当前输入的字符
if ((single >='0' && single<='9') || single=='.')//数据格式正确
{
if([textField.text
length]==0){
if(single ==
'.'){
//首字母不能为小数点
return
NO;
}
if (single ==
'0') {
_isFirstZero =
YES;
return
YES;
}
}
if (single=='.'){
if(!_isHaveDian)//text中还没有小数点
{
_isHaveDian=YES;
return
YES;
}else{
return
NO;
}
}else
if(single=='0'){
if ((_isFirstZero&&_isHaveDian)||(!_isFirstZero&&_isHaveDian))
{
//首位有0有.(0.01)或首位没0有.(10200.00)可输入两位数的0
if([textField.text
isEqualToString:@"0.0"]){
return
NO;
}
NSRange ran=[textField.text
rangeOfString:@"."];
int tt=(int)(range.location-ran.location);
if (tt <=
2){
return
YES;
}else{
return
NO;
}
}else
if (_isFirstZero&&!_isHaveDian){
//首位有0没.不能再输入0
return
NO;
}else{
return
YES;
}
}else{
if (_isHaveDian){
//存在小数点,保留两位小数
NSRange ran=[textField.text
rangeOfString:@"."];
int tt= (int)(range.location-ran.location);
if (tt <=
2){
return
YES;
}else{
return
NO;
}
}else
if(_isFirstZero&&!_isHaveDian){
//首位有0没点
return
NO;
}else{
return
YES;
}
}
}else{
//输入的数据格式不正确
return
NO;
}
}else{
return
YES;
}
}
return
YES;
}
assign) BOOL isHaveDian;
@property (nonatomic,
assign) BOOL isFirstZero;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
if (textField ==
self.amountTextField) {
if ([textField.text
rangeOfString:@"."].location==NSNotFound)
{
_isHaveDian =
NO;
}
if ([textField.text
rangeOfString:@"0"].location==NSNotFound)
{
_isFirstZero =
NO;
}
if ([string
length]>0)
{
unichar single=[string
characterAtIndex:0];//当前输入的字符
if ((single >='0' && single<='9') || single=='.')//数据格式正确
{
if([textField.text
length]==0){
if(single ==
'.'){
//首字母不能为小数点
return
NO;
}
if (single ==
'0') {
_isFirstZero =
YES;
return
YES;
}
}
if (single=='.'){
if(!_isHaveDian)//text中还没有小数点
{
_isHaveDian=YES;
return
YES;
}else{
return
NO;
}
}else
if(single=='0'){
if ((_isFirstZero&&_isHaveDian)||(!_isFirstZero&&_isHaveDian))
{
//首位有0有.(0.01)或首位没0有.(10200.00)可输入两位数的0
if([textField.text
isEqualToString:@"0.0"]){
return
NO;
}
NSRange ran=[textField.text
rangeOfString:@"."];
int tt=(int)(range.location-ran.location);
if (tt <=
2){
return
YES;
}else{
return
NO;
}
}else
if (_isFirstZero&&!_isHaveDian){
//首位有0没.不能再输入0
return
NO;
}else{
return
YES;
}
}else{
if (_isHaveDian){
//存在小数点,保留两位小数
NSRange ran=[textField.text
rangeOfString:@"."];
int tt= (int)(range.location-ran.location);
if (tt <=
2){
return
YES;
}else{
return
NO;
}
}else
if(_isFirstZero&&!_isHaveDian){
//首位有0没点
return
NO;
}else{
return
YES;
}
}
}else{
//输入的数据格式不正确
return
NO;
}
}else{
return
YES;
}
}
return
YES;
}
相关文章推荐
- solr 自定义QueryParser 用户查询解析方案
- Handler、Looper、MessageQueue源码分析
- 关于Arduino Mega 2560串口的一些蛋疼问题
- android Gui系统之SurfaceFlinger(1)
- 后台子线程(非主线程)更新UI引起的警告
- iOS UIButton单双击处理响应不同的方法
- 修改mfc程序图标、利用DUILIB库自定义界面
- UI动画_UIBezierPath_实现动画弧线
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- SaltStack WEB UI Halite 图形界面安装配置
- 实习杂记(23):build.xml进行ant编译的时候target的执行顺序
- WinForm停靠控件介绍:WeifenLuo.WinFormsUI.Docking.dll
- Setting VirtualBox to use it's built-in VNC server (ver. >= 4.2 I think) - failed
- Ueditor图片上传不能兼容微信浏览器的解决方案
- Picasso源码分析(四):不变模式、建造者模式和Request的预处理
- Android Ui设计相关的网站推荐
- Juicer 中文文档
- 关于Mat转UIImage之后颜色不对的解决方法
- squirrel-sql通过phoenix-4.7.0连接windows中的hbase-1.1.3(三)
- 使用递归遍历对象获得value值的实现方法