关于iOS

自定义输入金额的键盘(支持每三位数字逗号隔开)

2016-09-29  本文已影响145人  安然slience

很多时候我们都需要一个自定义的键盘来输入金额,并且要每三位加逗号隔开,下面我写了一个demo,供大家参考,废话不说,附上主要代码.

self.btnTitles = @[@"7",@"8",@"9",@"4",@"5",@"6",@"1",@"2",@"3",@"0",@"10",@"11",@"C",@"清除"];

for (int i = 0; i < self.btnTitles.count - 2; i++) {
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    NSString *number = [self.btnTitles objectAtIndex:i];
    
    [btn setTag:number.integerValue];
    [btn setBackgroundColor:[UIColor whiteColor]];
    [btn setContentMode:UIViewContentModeBottom];
    [btn setFrame:CGRectMake((i%3) * BTN_WIDTH, (i/3) * BTN_HEIGHT + height, BTN_WIDTH, BTN_HEIGHT)];
    [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@",number]];
    UIView *view = [[UIView alloc] init];
    [view setUserInteractionEnabled:NO];
    view.layer.contents = (id)image.CGImage;
    [view setBounds:CGRectMake(0, 0, image.size.width, image.size.height)];
    view.center = CGPointMake(BTN_WIDTH/2.f, BTN_HEIGHT /2.f);
    [btn addSubview:view];
    
}

for (int i = 0; i < self.btnTitles.count - 12; i++) {
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setTag:i + 12];
    [btn setBackgroundColor:[UIColor whiteColor]];
    [btn setContentMode:UIViewContentModeBottom];
    [btn setFrame:CGRectMake(3 * BTN_WIDTH, i * 2 * BTN_HEIGHT + height, BTN_WIDTH, 2 * BTN_HEIGHT)];
    [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
    UIImage *image = [UIImage imageNamed:[self.btnTitles objectAtIndex:i + 12]];
    UIView *view = [[UIView alloc] init];
    [view setUserInteractionEnabled:NO];
    view.layer.contents = (id)image.CGImage;
    [view setBounds:CGRectMake(0, 0, image.size.width, image.size.height)];
    view.center = CGPointMake(BTN_WIDTH/2.f, BTN_HEIGHT);
    [btn addSubview:view];
}

for (int i = 0; i < 2; i++) {
    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(BTN_WIDTH * i, height, LINE_HEIGTH, BTN_HEIGHT * 4)];
    [line setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:line];
}

for (int i = 0; i < 5; i++) {
    CGFloat w;
    if ((i+1) % 2 == 0) {
        w = SCREEN_WIDTH  - BTN_WIDTH;
    }else {
        w = SCREEN_WIDTH;
    }
    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, height + i*BTN_HEIGHT, w, LINE_HEIGTH)];
    [line setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:line];
}


for (int i = 1; i < 4; i++) {
    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(BTN_WIDTH * i, height, LINE_HEIGTH, BTN_HEIGHT * 4)];
    [line setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:line];
}

以上是布局键盘,下面是键盘的点击事件.

- (void)btnAction:(UIButton *)btn
{
switch (btn.tag) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:{
        if(self.isFloat){
            if(self.numerical % 100 == 0  && self.floatTen == -1 && self.floatDigits == -1){//刚点击完小数点
                self.numerical = self.numerical + btn.tag*10;
                self.floatTen = btn.tag;
            }else if(self.numerical % 10 == 0  && self.floatDigits == -1){//小数点后一位
                self.numerical = self.numerical + btn.tag*1;
                self.floatDigits = btn.tag;
            }else { //小数点后两位
                //已经达到小数点后两位不能输入
            }
        }else {
            if([self getIntPartLength] < MAX_COUNT_LENGTH)//小于最大值
                self.numerical = self.numerical*10 + btn.tag*100;
        }
    }
        break;
    case 10:{//点
        self.isFloat = YES;
    }
        break;
    case 11://00
        if(!self.isFloat){
            if([self getIntPartLength] < MAX_COUNT_LENGTH - 1){
                self.numerical *= 100;
            }else if([self getIntPartLength] < MAX_COUNT_LENGTH){
                self.numerical *= 10;
            }
        }
        
        break;
    case 12://C
        self.numerical = 0;
        self.isFloat = NO;
        self.floatTen = -1;
        self.floatDigits = -1;
        
        break;
    case 13://清除
        if(!self.isFloat){
            if(self.numerical >= 1000){
                NSInteger floatPart = self.numerical % 100;
                self.numerical /= 1000;
                self.numerical =self.numerical*100 + floatPart ;
            }else if(self.numerical >=100){
                self.numerical %= 100;
            }
        }else {
            if(self.numerical % 100 == 0 && self.floatTen == -1 && self.floatDigits == -1){//刚点击完小数点
                self.isFloat = NO;
                self.numerical /= 1000;
                self.numerical *= 100;
                self.floatTen = -1;
                self.floatDigits = -1;
            }else if(self.numerical % 10 == 0 && self.floatDigits == -1){//小数点后一位
                self.numerical /= 100;
                self.numerical *= 100;
                self.floatTen = -1;
            }else { //小数点后两位
                self.numerical /= 10;
                self.numerical *= 10;
                self.floatDigits = -1;
            }
        }
        break;
    default:
        break;
}

[self.labNumber setText:self.showStr];

}

我知道很多童鞋喜欢看demo来理解代码,下面附上github地址,仅供参考.
github地址:https://github.com/ZSyingyu/CustomKeyboardDemo.git

上一篇 下一篇

猜你喜欢

热点阅读