2015-04-21 13 views
5

szukam sposobu realizacji maskę wprowadzania do UITextField tak: enter image description hereWdrożenie maskę wprowadzania do UITextField

Najważniejsze cechy:

  1. Pokaż zastępczy pustego char na prawo od kursora
  2. Uniemożliwienie wejście błędnych znaków dla aktualnej pozycji kursora (na przykład, pierwszy znak może być tylko łacińskiego char drugi znak może być tylko kilka)
  3. Zakaz wybrać lub wyciąć
  4. Zakaz ustawiania położenia kursora (użytkownik będzie tylko w stanie dodać nowy char lub usunąć ostatni)
+0

, które mogą być użyteczne dla kilku swoich punktach: http: //stackoverflow.com/questions/2388448/re-apply-currency-formatting-to-a-uitextfield-on-a-change-event/ 2919532 # 2919532 – casillas

Odpowiedz

0

udało mi się dostać to wszystko działa z podklasy UITextField. Prawdopodobnie będziesz chciał przenieść te metody delegatów do ViewController i ustawić niestandardowego delegata TextField tam. Ze względu na ten przykład łatwiej jest pokazać wszystko w jednej klasie. Oczywiście będziesz musiał ulepszyć te zestawy znaków, które pozwolą ci spełnić twoje potrzeby.

#import "TextField.h" 

@interface TextField()<UITextFieldDelegate> 

@end 

@implementation TextField 

-(instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.delegate = self; 
    } 
    return self; 
} 

- (UITextPosition *)closestPositionToPoint:(CGPoint)point{ 
    UITextPosition *beginning = self.beginningOfDocument; 
    UITextPosition *end = [self positionFromPosition:beginning offset:self.text.length]; 
    return end; 
} 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    if (action == @selector(paste:) 
     || action == @selector(select:) 
      || action == @selector(selectAll:) 
       || action == @selector(cut:)){ 
     return NO; 
    } 
    return [super canPerformAction:action withSender:sender]; 
} 

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (range.location == 0 && [string rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]].location == NSNotFound) { 
     return NO; 
    }else if (range.location == 1 && [string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == NSNotFound){ 
     return NO; 
    } 

    return YES; 
} 

@end