2013-04-04 53 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的答案应该适合你!