2015-04-21 74 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