2012-11-13 71 views

回答

0

這很難,我想。當文本更改時發送的通用通知是UITextFieldTextDidChangeNotification。在viewDidLoad方法中,您應該向接收者註冊此通知,並在文本更改時執行選擇器。在選擇器中,每4個字符添加一個破折號。
在我的代碼中,文本字段被命名爲textField

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSNotificationCenter* center=[NSNotificationCenter defaultCenter]; 
    [center addObserver: self selector: @selector(textDidChange:) name: UITextFieldTextDidChangeNotification object: textField]; 
} 

- (void) textDidChange : (NSNotification*) notification 
{ 
    NSString* string=[[textField text] stringByReplacingOccurrencesOfString: @"-" withString: @""]; 
    __block NSMutableString* newString= [string mutableCopy]; 
    NSMutableIndexSet* set=[NSMutableIndexSet new]; 
    for(NSUInteger i=4; i<[string length];i+=4) 
    { 
     [set addIndex: i+i/4-1]; 
    } 
    [set enumerateIndexesInRange: NSMakeRange(0, [string length]+[string length]/4) options: 0 usingBlock: ^(NSUInteger index, BOOL* stop) 
    { 
     [newString insertString: @"-" atIndex: index]; 
    }]; 
    [textField setText: newString]; 
} 

每4個字符添加破折號的代碼很長,也許有一個更簡單的方法來做到這一點。

PS:最後的版本不正確,我編輯它(無法正確刪除字符)。

+0

非常感謝Ramy Al Zuhouri!有效! :D – jaytrixz

+0

運行iOS 5時,我在代碼中發現了一個錯誤。只要用戶在textField上鍵入任何內容,就會掛起或凍結。任何修復建議?我認爲這是阻斷,但我不確定。 – jaytrixz

+0

這可以通過實現'UITextFieldDelegate'的'textField:shouldChangeCharactersInRange:replacementString:'方法來簡化。 –

相關問題