做了一个带标记的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
原创粉丝点击