2012-06-26 3 views
0

Я видел другие примеры и пыталисьФормат TextField при вводе Ios

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

Я не уверен, что я делаю неправильно, я только начал программировать свой первый Iphone App

Это то, что я пытаюсь сделать

у меня 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, затем добавьте a, но тогда это дает мне, когда я вхожу 12, он дает 11/22

+2

Просто предложение: почему бы вам не использовать iphone date picker для выбора даты, он предоставит формат даты, и вам не придется его обрабатывать. –

+0

Я согласен, что выбор даты был бы проще для меня, но требования требуют, чтобы он печатал цифровую панель, и мне приходится отформатировать на основе ввода пользователем .... – BBios

ответ

0

Как и Нуджат, дампикер, вероятно, хорошая идея. Вот код, который вы можете использовать для popup 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; 
    } 
} 

Тогда все, что вам нужно сделать, это подключить сеанс и назовите его dateSegue в раскадровке.

Смежные вопросы