0

私は他の例を見て試しました

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

ここまでは問題なく動作します。ユーザーが有効期限を入力するテキストフィールドがあり、112 を入力しているかのようにフォーマットしたい場合は 01/12 と表示され、2 を入力すると 1122 と表示されます

テキストフィールド値の長さが2であるかどうかを確認してから/を追加してみましたが、12を入力すると11/22が得られます

4

1 に答える 1

0

Nuzhat が示唆したように、datepicker はおそらく良い考えです。ポップオーバーの日付ピッカーに使用できるコードを次に示します。基本的に、DateController (以下のコード) のサブクラスであるビュー コントローラーを作成し、テキスト フィールドにポップオーバーさせます。次に、View Controller にデリゲート メソッドを実装して、テキスト フィールドを更新します。

//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;
    }
}

あとは、セグエを接続して、ストーリーボードで dateSegue という名前を付けるだけです。

于 2012-06-26T15:54:53.040 に答える