我有一個文本框,我想用數字鍵盤輸入它。 我希望文本框首先像00.00一樣,並且當用戶開始打字時,從左到右或從右到左更新。例如,如果他輸入2然後輸入3,那麼textfield應該是23.00,而且用戶只允許輸入小數點後最多2位數的數字。 我怎樣才能獲得這個功能?UITextField輸入字符串更新
感謝高級。
乾杯, 薩瓦什
我有一個文本框,我想用數字鍵盤輸入它。 我希望文本框首先像00.00一樣,並且當用戶開始打字時,從左到右或從右到左更新。例如,如果他輸入2然後輸入3,那麼textfield應該是23.00,而且用戶只允許輸入小數點後最多2位數的數字。 我怎樣才能獲得這個功能?UITextField輸入字符串更新
感謝高級。
乾杯, 薩瓦什
在.h
@property (assign, nonatomic) int maximumFractionDigits;
@property (strong, nonatomic) NSString* decimalSeparator;
在loadView
或viewDidLoad
把這個,
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;
}
您可以使用下面的委託方法。根據您的要求更改。
-(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;
}
什麼阿布t'sep'在這個'[sep objectAtIndex:1]'????? – Venkat 2013-04-04 04:25:30
@Ramu是的,那麼[sep objectAtIndex:1]怎麼樣,我應該在哪裏以及如何聲明「sep」? – 2013-04-04 04:34:29
@siavashAlipour,現在試試吧,讓我知道..在我的項目中,我只用了一個小數點。如果你沒有得到它,我會嘗試在這裏,讓你知道 – 2013-04-04 04:44:02
如果你想設置十位數前的數字,這是一個黑客,但我認爲它可以工作。你可以使用類似的UITextField的委託方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
確保您設置文本字段的委託,然後用這個方法。您可以自己保留一個計數器,以確定每次擊鍵時要更改哪個索引。你會忽略這個範圍,然後用你正在跟蹤的那個來改變它。例如,從索引0開始並在每次調用方法時增加它,但在按下沒有按鈕的X秒後,重置爲第一個索引。
否則,Ramu的答案應該適合你!
這是工作得很好,但還有一件事,用戶如何在小鍵盤上用DONE按鈕輸入小數點? 我看到有一個00.00的文本字段的程序,並且當你開始插入數字時,它首先在小數點後面填充兩個數字,然後繼續。 我的意思是...... – 2013-04-04 04:37:48
使用'textField.keyboardType = UIKeyboardTypeDecimalPad;'爲十進制鍵盤。但完成按鈕,你必須自定義鍵盤,或者你可以使用工具欄完成按鈕.. – Venkat 2013-04-04 04:42:01
我知道,我已經定製我的鍵盤,它已完成按鈕。 https://itunes.apple.com/us/app/discount-calculator-free-shopping/id473404571?mt=8 我想要這樣。 – 2013-04-04 04:44:24