做了一个带标记的textField
来源:互联网 发布:数据统计分析ppt 编辑:程序博客网 时间:2024/05/01 20:35
今天有需求,做一个只能输入数字的textField,并且可以在后面追加单位,比如%号,或者个,或者其他什么的,另外还可以限制数字的最大范围,比如不能超过100,或者任意一个定义的数字。
#import <UIKit/UIKit.h>@interface NumberTextField : UITextField { UILabel *label;//显示尾部的label}@property(assign, nonatomic) BOOL showLabelFlg;//是否追加标记@property(retain, nonatomic) NSString *labelText;//标记的文字内容@property(retain, nonatomic) UIFont *labelTextFont;//标记的字体大小@property double maxNumber;//设置要限制的数字的最大值,默认为0,不限制//设置是否显示标签label-(void) showlabelFlgSet:(BOOL) flg;//设置label的字体,不设置时,默认使用textField的字体-(void) labelTextFontSet:(UIFont *) font;@end
#import "NumberTextField.h"#define NUMBERS @"0123456789."@implementation NumberTextField//构造方法- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code self.keyboardType = UIKeyboardTypeNumberPad; //设置注册事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextFieldTextDidChangeNotification object:self]; } return self;}//构造方法- (id)init{ self = [super init]; if (self) { // Initialization code self.keyboardType = UIKeyboardTypeNumberPad; //设置注册事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextFieldTextDidChangeNotification object:self]; } return self;}//设置label的字体,不设置时,默认使用textField的字体-(void) labelTextFontSet:(UIFont *) font { self.labelTextFont = font; [self setInitLabel];}//显示label-(void) showlabelFlgSet:(BOOL) flg { self.showLabelFlg = flg; if(label == nil) { [self setInitLabel]; } if(flg) { [self addSubview:label]; } else { [label removeFromSuperview]; }}//初始化label-(void) setInitLabel { NSString *str = @""; UIFont *font; if (self.labelText != nil) { str = self.labelText; } if(self.labelTextFont != nil) { font = self.labelTextFont; } else { font = self.font; } label = [[UILabel alloc] init]; label.text = str; label.font = font; CGSize size = [str sizeWithFont:font constrainedToSize:self.frame.size lineBreakMode:NSLineBreakByWordWrapping];// NSLog(@"self.frame.size.height: %f", self.frame.size.height);// NSLog(@"size.height: %f", size.height); float y = (self.frame.size.height - size.height)/2.2; float height = size.height + 1.0; label.frame = CGRectMake(2, y, size.width, height >= self.frame.size.height ? self.frame.size.height : height);// label.layer.borderWidth = 1;}//重写注销方法-(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:self];}//文字变化调用的方法-(void) textDidChange : (NSNotification *)notification { NSString *string = self.text; NSCharacterSet*cs; cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet]; NSString*filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; BOOL basicTest = [string isEqualToString:filtered]; if(!basicTest) { UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"请输入数字" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show]; self.text = @""; } if(self.maxNumber != 0) { double number = [self.text doubleValue]; while (number > self.maxNumber) { self.text = [self.text substringToIndex:self.text.length - 1]; number = [self.text doubleValue]; } } CGSize size = [self.text sizeWithFont:self.font constrainedToSize:self.frame.size lineBreakMode:NSLineBreakByWordWrapping]; float x = size.width + 2.0; float y = (self.frame.size.height - size.height)/2.2; label.frame = CGRectMake(x, y, label.frame.size.width, label.frame.size.height);}
0 0
- 做了一个带标记的textField
- 如何添加一个带标记的编辑器
- 开始管理我的博客了,做个标记
- 如何做一个标记为安全的ACTIVEX控件
- 做一个带X的弹出DIV
- 标记一个好的应用了VimWiki的网站
- 如果做一个精美的Login界面(解决了一EditText自带clear的功能,类似iphone的UITextField)
- textField的事件发出(带参数)
- extjs3 编写 带按钮的 textfield
- 做了几天报表的一个总结
- 做了一个五子棋程序的框架
- 今天做了一个有趣的测试
- 做了一个礼拜的杂志系统
- 自己做了一个google的logo
- 又做了一个郁闷的项目
- 做了一个来电显示的OCX控件
- 昨晚做了一个有意思的梦
- 做了一个星期的手机应用
- git 常用命令
- oracle与sqlserver的十大区别
- ios 动画 彩图
- android MotionEvent中getX()和getRawX()的区别
- scala学习五 继承的实现
- 做了一个带标记的textField
- c++ “>>”符号的影响
- leetcode之Binary Tree Level Order Traversal II
- 小知识
- Android Service 服务(一)—— Service
- mysql 子查询
- bag-of-words model的java实现
- 关于hibernate表之间的关联关系的注解使用
- ArcGIS Server10在Windows server2008 64位系统中的安装步骤