我有一个文本框,我想用数字键盘输入它。 我希望文本框首先像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