输入 Ios 时格式化文本字段

Posted

技术标签:

【中文标题】输入 Ios 时格式化文本字段【英文标题】:Format textfield while typing Ios 【发布时间】:2012-06-26 15:05:56 【问题描述】:

我看过其他例子并尝试过

- (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

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

【问题讨论】:

只是一个建议:你为什么不使用iphone日期选择器来选择日期,它会提供日期格式,你不必处理它。 我同意日期选择器对我来说也会更容易,但要求它必须使用数字键盘输入,并且我必须根据用户输入进行格式化...... 【参考方案1】:

就像 Nuzhat 建议的那样,日期选择器可能是个好主意。这是一些可用于弹出日期选择器的代码。基本上,创建一个视图控制器,它是 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 并在 storyboard 中将它命名为 dateSegue。

【讨论】:

以上是关于输入 Ios 时格式化文本字段的主要内容,如果未能解决你的问题,请参考以下文章

在javaFX中实时格式化价格文本字段

iOS 7中文本字段的弹出/模式选择器

iOS 从 NSNumberFormatter 字符串中取回值

iOS 货币输入栏

如何格式化文本字段javafx

如何右对齐和格式化输入到 Strut2 文本字段中的金额?