2015-04-21 2 views
5

Я ищу способ реализации маски ввода для UITextField как это: enter image description hereРеализовать маску ввода для UITextField

Ключевых особенностей:

  1. Показать заполнитель для пустого полукокса справа от курсора
  2. Запретить ввод неверных символов для текущей позиции курсора (например, первый символ может быть только латинский символ, второй символ может быть только число)
  3. выберите Запретить, вырезать и вставить
  4. Запрещать установки положения курсора (пользователь сможет только добавить новый символ или удалить последний)
+0

, которые могут быть полезны для нескольких ваших пунктов: HTTP: //stackoverflow.com/questions/2388448/re-apply-currency-formatting-to-a-uitextfield-on-a-change-event/ 2919532 # 2919532 – casillas

ответ

0

я был в состоянии получить все, что работа с подкласса UITextField. Вероятно, вам захочется переместить эти методы делегатов в ViewController и установить там специальный делегат TextField. Для этого примера вам проще показать все в одном классе. Очевидно, вам нужно будет настроить эти наборы символов, разрешенные для удовлетворения ваших потребностей.

#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 
Смежные вопросы