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