2013-04-04 57 views
0

我有一個文本框,我想用數字鍵盤輸入它。 我希望文本框首先像00.00一樣,並且當用戶開始打字時,從左到右或從右到左更新。例如,如果他輸入2然後輸入3,那麼textfield應該是23.00,而且用戶只允許輸入小數點後最多2位數的數字。 我怎樣才能獲得這個功能?UITextField輸入字符串更新

感謝高級。

乾杯, 薩瓦什

回答

2

.h

@property (assign, nonatomic) int maximumFractionDigits; 
@property (strong, nonatomic) NSString* decimalSeparator; 

loadViewviewDidLoad把這個,

NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[numberFormatter setCurrencyCode:@"GBP"]; 
self.maximumFractionDigits = numberFormatter.maximumFractionDigits; 
self.decimalSeparator = numberFormatter.decimalSeparator; 
[numberFormatter release]; 

UITextFieldDelegate方法

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string { 
// get current cursor position 
UITextRange* selectedRange = [textField selectedTextRange]; 
UITextPosition* start = textField.beginningOfDocument; 
NSInteger cursorOffset = [textField offsetFromPosition:start toPosition:selectedRange.start]; 
// Update the string in the text input 
NSMutableString* currentString = [NSMutableString stringWithString:textField.text]; 
NSUInteger currentLength = currentString.length; 
[currentString replaceCharactersInRange:range withString:string]; 
// Strip out the decimal separator 
[currentString replaceOccurrencesOfString:self.decimalSeparator withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [currentString length])]; 
// Generate a new string for the text input 
int currentValue = [currentString intValue]; 
NSString* format = [NSString stringWithFormat:@"%%.%df", self.maximumFractionDigits]; 
double minorUnitsPerMajor = pow(10, self.maximumFractionDigits); 
NSString* newString = [NSString stringWithFormat:format, currentValue/minorUnitsPerMajor]; 
textField.text = newString; 
// if the cursor was not at the end of the string being entered, restore cursor position 
if (cursorOffset != currentLength) { 
    int lengthDelta = newString.length - currentLength; 
    int newCursorOffset = MAX(0, MIN(newString.length, cursorOffset + lengthDelta)); 
    UITextPosition* newPosition = [textField positionFromPosition:textField.beginningOfDocument offset:newCursorOffset]; 
    UITextRange* newRange = [textField textRangeFromPosition:newPosition toPosition:newPosition]; 
    [textField setSelectedTextRange:newRange]; 
} 

return NO; 

}

+0

這是工作得很好,但還有一件事,用戶如何在小鍵盤上用DONE按鈕輸入小數點? 我看到有一個00.00的文本字段的程序,並且當你開始插入數字時,它首先在小數點後面填充兩個數字,然後繼續。 我的意思是...... – 2013-04-04 04:37:48

+0

使用'textField.keyboardType = UIKeyboardTypeDecimalPad;'爲十進制鍵盤。但完成按鈕,你必須自定義鍵盤,或者你可以使用工具欄完成按鈕.. – Venkat 2013-04-04 04:42:01

+0

我知道,我已經定製我的鍵盤,它已完成按鈕。 https://itunes.apple.com/us/app/discount-calculator-free-shopping/id473404571?mt=8 我想要這樣。 – 2013-04-04 04:44:24

1

您可以使用下面的委託方法。根據您的要求更改。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
NSString *replacedSting = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

NSArray *noOfDigits = [replacedSting componentsSeparatedByString:@"."]; 
if([noOfDigits count]>=2) 
{ 
    NSString *sepStr=[NSString stringWithFormat:@"%@",[noOfDigits objectAtIndex:1]]; 
    return !([sepStr length]>1); 
} 
return YES; 
} 
+0

什麼阿布t'sep'在這個'[sep objectAtIndex:1]'????? – Venkat 2013-04-04 04:25:30

+0

@Ramu是的,那麼[sep objectAtIndex:1]怎麼樣,我應該在哪裏以及如何聲明「sep」? – 2013-04-04 04:34:29

+0

@siavashAlipour,現在試試吧,讓我知道..在我的項目中,我只用了一個小數點。如果你沒有得到它,我會嘗試在這裏,讓你知道 – 2013-04-04 04:44:02

0

如果你想設置十位數前的數字,這是一個黑客,但我認爲它可以工作。你可以使用類似的UITextField的委託方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

確保您設置文本字段的委託,然後用這個方法。您可以自己保留一個計數器,以確定每次擊鍵時要更改哪個索引。你會忽略這個範圍,然後用你正在跟蹤的那個來改變它。例如,從索引0開始並在每次調用方法時增加它,但在按下沒有按鈕的X秒後,重置爲第一個索引。

否則,Ramu的答案應該適合你!