键入Ios时格式化文本字段

时间:2012-06-26 15:05:56

标签: iphone objective-c ios xcode cocoa-touch

我见过其他例子并试过

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

我不确定我做错了什么,我刚刚开始编写我的第一个Iphone应用程序

这就是我想要做的事情

我有4个文本字段,每个字体在输入时都有字数限制我使用下面的代码完成了这个

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int valid;
    NSString *cs2 = [textField.text stringByReplacingCharactersInRange:range withString:string];
//    int charCount = [cs2 length];

    if(textField == cvv){
        valid = 4;
    }else if(textField == cardName) {
        valid=26;
    }else if(textField == expDate) {
        valid=5;

//        if (charCount == 2 ) {
//            textField.text = [cs2 stringByAppendingString:@"/"];
//            textField.text = cs2; 
//            return YES;
//        }



    }else if(textField == acNumber) {
        valid=19;
    }


    return !([cs2 length] > valid);

工作正常,直到这里,我有一个文本字段,用户输入Exp日期,并希望格式化,就好像我输入112然后它应显示为01/12,如果我输入2然后它应显示为1122 < / p>

我试过检查文本字段值的长度是否为2,然后附加一个/但是当我输入12时它给了我11/22

1 个答案:

答案 0 :(得分:0)

像Nuzhat建议的那样,日期选择器可能是一个好主意。这里有一些代码可以用于popover datepicker。基本上,创建一个视图控制器,它是DateController的子类(下面的代码),并让它弹出文本字段。然后,在视图控制器中实现委托方法以更新文本字段。

//DateController.h

#import <UIKit/UIKit.h>
@protocol DateControllerDelegate
- (void) upDate:(NSDate*) date;
@end

@interface DateController : UIViewController <UIPickerViewDelegate>
- (IBAction)datePicker:(id)sender;

@property (weak, nonatomic) IBOutlet UIDatePicker *dateWheel;
@property (unsafe_unretained, nonatomic) id<DateControllerDelegate> delegate;
@end

//DateController.m
#import "DateController.h"

@implementation DateController
@synthesize dateWheel;
@synthesize delegate;

- (IBAction)datePicker:(id)sender 
{
    [delegate upDate:dateWheel.date];
}

@end

//Add this to your ViewController.h
#import "DateController.h"

//This line should look like this
@interface ViewController:UIViewController <DateControllerDelegate>

//Add this to your ViewController.m
- (void) upDate:(NSDate*) date
{

    textField.text = [[date description] substringToIndex:10];
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"dateSegue"])
    {
        DateController *foo = segue.destinationViewController;
        foo.delegate = self;
    }
}

然后你所要做的就是连接segue并在故事板中将其命名为dateSegue。