Iphone UITextField输入字符串更新

Iphone UITextField输入字符串更新,iphone,ios,xcode,ipad,Iphone,Ios,Xcode,Ipad,我想用numpad键盘输入一个文本字段。 我希望文本字段一开始是00.00,当用户开始键入时,它会从左到右或从右到左更新。e、 g如果他键入2后跟3,那么textfield应该是23.00,而且用户只允许输入小数点后最多2位的数字。 我怎样才能得到这个功能 提前谢谢 干杯, Siavash您可以使用下面的委托方法。根据您的要求进行更改 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)

我想用numpad键盘输入一个文本字段。 我希望文本字段一开始是00.00,当用户开始键入时,它会从左到右或从右到左更新。e、 g如果他键入2后跟3,那么textfield应该是23.00,而且用户只允许输入小数点后最多2位的数字。 我怎样才能得到这个功能

提前谢谢

干杯,
Siavash

您可以使用下面的委托方法。根据您的要求进行更改

-(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;
}

您可以使用下面的委托方法。根据您的要求进行更改

-(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;
}

如果你想把十位数设置在一位数之前,这有点麻烦,但我认为它可以工作。您可以使用类似UITextField的委托方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
确保设置了文本字段的委托,然后使用此方法。您可以自己保留一个计数器,以确定每次击键时要更改的索引。你会忽略范围,自己用你正在跟踪的范围来改变它。例如,从索引0开始,并在每次调用该方法时递增,但在没有按下按钮的X秒后,重置为第一个索引


否则,拉穆的答案应该对你有用

如果你想将十位数设置在一位数之前,这有点麻烦,但我认为它可以工作。您可以使用类似UITextField的委托方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
确保设置了文本字段的委托,然后使用此方法。您可以自己保留一个计数器,以确定每次击键时要更改的索引。你会忽略范围,自己用你正在跟踪的范围来改变它。例如,从索引0开始,并在每次调用该方法时递增,但在没有按下按钮的X秒后,重置为第一个索引

否则,拉穆的答案应该对你有用

.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;
}在
.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;

}

@Ramu是的,那么[sep objectAtIndex:1]呢,我应该在哪里以及如何声明“sep”?@siavashAlipour,现在试试,让我知道。。在我的项目中,我只尝试了一个小数点。如果你没有得到它,我将尝试在这里让你know@RamuPasupuleti,我想我在问题上没有说清楚,我在找的是这样的东西:我想要这样的东西。@Ramu是的,关于[sep objectAtIndex:1],我应该在哪里以及如何声明“sep”?@siavashAlipour,现在试试,让我知道。。在我的项目中,我只尝试了一个小数点。如果你没有得到它,我将尝试在这里让你know@RamuPasupuleti,我想我没有把问题说清楚,我要找的是这样的东西:我想要这样的东西。这工作很好,但还有一件事,用户如何使用“完成”按钮在numpad键盘上输入小数点?我看到有一个文本字段为00.00的程序,当你开始插入数字时,它首先填充小数点后的两位数字,然后继续。我的意思是这样的使用
textField.keyboardType=UIKeyboardTypeDecimalPad用于十进制键盘。但对于“完成”按钮,您必须自定义键盘,或者您可以使用带有“完成”按钮的工具栏。我知道,我已经自定义了我的键盘,它有“完成”按钮。我想要这样的东西。你看到应用程序了吗?不插入小数点,你得到一个浮点数,你插入2345,然后你得到45.23!!!我想要这个。如果你输入23456,它应该显示234.56,对吗???或者用户输入只有四位数字(1234)??这很好,但还有一件事,用户如何使用“完成”按钮在numpad键盘上输入小数点?我看到有一个文本字段为00.00的程序,当你开始插入数字时,它首先填充小数点后的两位数字,然后继续。我的意思是这样的使用
textField.keyboardType=UIKeyboardTypeDecimalPad用于十进制键盘。但对于“完成”按钮,您必须自定义键盘,或者您可以使用带有“完成”按钮的工具栏。我知道,我已经自定义了我的键盘,它有“完成”按钮。我想要这样的东西。你看到应用程序了吗?不插入小数点,你得到一个浮点数,你插入2345,然后你得到45.23!!!我想要这个。如果你输入23456,它应该显示234.56,对吗???或者用户条目将仅为四位数字(1234)???