0

こんにちは、みんな、

私は、特定のテキストフィールドのテンキーを作成しているため、テキストフィールドをクリックしたときにキーパッドがポップアップしないという要件のプロジェクトに取り組んでおり、これを行うことに成功しています。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
            if (textField == dateFld) {

                UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
               textField.inputView = dummyView;
      }  
}

今私の問題は、特定の形式と限られた数の入力のみを受け入れるようにそのテキストフィールドを検証したいのですが、下にポップするキーパッドを無効にしたときにそのメソッドが呼び出されないため、これを行うことができませんテキストフィールドを検証します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    //Format Date of Birth YYYY-MM-DD
    if(textField == dateFld)
    {
        if ((dateFld.text.length == 4)||(dateFld.text.length == 7))
            //Handle backspace being pressed
            if (![string isEqualToString:@""])
                dateFld.text = [dateFld.text stringByAppendingString:@"-"];
        return !([textField.text length]>9 && [string length] > range.length);
    }
    else
        return YES;

}

この問題またはこれを行う他の方法から抜け出すのを手伝ってください。

ありがとう

4

3 に答える 3

0

そのテキストフィールドを検証して、特定の形式と限られた数の入力のみを受け入れるようにしたい:

if(textField == dateFld){
       NSCharacterSet* numberCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789+"];
    for (int i = 0; i < [string length]; ++i)
    {
        unichar c = [string characterAtIndex:i];
        if (![numberCharSet characterIsMember:c])
        {
            return NO;
        }
    }
 //Format Date of Birth YYYY-MM-DD
 if([textField.text length] == 4) {
        textField.text=[NSString stringWithFormat:@"%@-",textField.text];
    }else if([textField.text length]==6){

        textField.text=[NSString stringWithFormat:@"%@-",textField.text];

    }else if([textField.text length]==8){

        textField.text=[NSString stringWithFormat:@"%@",textField.text];

    }
    NSLog(@"value %@",textField.text);
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 13) ? NO : YES;
}
}

それは私にとってはうまくいっています。

于 2013-01-18T13:57:16.400 に答える
0

入力を検証する必要がありますdummyView

UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
textField.inputView = dummyView;

UITextField の入力ビューを置き換えたため、UITextField デリゲートは呼び出されません。

于 2013-04-11T12:16:01.593 に答える
0

私はこのようなことをします:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSError *_error = nil;
    NSRegularExpression *_regularExpression = [NSRegularExpression regularExpressionWithPattern:@"^\\d{0,4}-{0,1}$|^\\d{4}-{1}\\d{0,2}-{0,1}$|^\\d{4}-{1}\\d{2}-{1}\\d{0,2}$" options:NSRegularExpressionCaseInsensitive error:&_error];
    NSMutableString *_newText = [NSMutableString stringWithString:textField.text];
    [_newText insertString:string atIndex:range.location];
    NSArray *_matches = [_regularExpression matchesInString:_newText options:0 range:NSMakeRange(0, _newText.length)];
    return _matches.count > 0;
}

EDIT#1 (22/01/13)

もちろん、クラスは のデリゲート クラスである必要がありますUITextField。そうでない場合、上記のメソッドはコールバックされません。

追加の手順がいくつかあります。

YourViewController.hファイルで:

@interface YourViewController : UIViewController <UITextFieldDelegate> {
    // ...
}

@property (nonatomic, strong) IBOutlet UITextField *myTextField; // is case of ARC and iOS5+

@end

YourViewController.mファイル

- (void)viewDidLoad
{
    [super viewDidLoad];

    // ...

    [self.myTextField setDelegate:self]; // you can do the same thing in the interface builder as well.
}
于 2013-01-18T14:48:32.033 に答える