0

テンキーキーボードで入力したいテキストフィールドがあります。最初はテキストフィールドを00.00のようにして、ユーザーが入力を開始すると、左から右、または右から左に更新します。たとえば、2 の後に 3 を入力すると、テキストフィールドは 23.00 のようになり、ユーザーは小数点以下 2 桁までの数字を入力できるようになります。どうすればこの機能を取得できますか??

ありがとうございます。

乾杯、シアバッシュ

4

3 に答える 3

2

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

}

于 2013-04-04T04:31:05.057 に答える
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;
}
于 2013-04-04T04:22:43.200 に答える
0

1 桁の前に 10 桁を設定しようとしている場合、これはちょっとしたハックですが、うまくいくと思います。UITextField のデリゲート メソッドのようなものを使用できます

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

テキスト フィールドのデリゲートを設定したことを確認してから、このメソッドを使用してください。キーストロークごとにどのインデックスを変更するかを把握するために、カウンターを自分で保持できます。範囲を無視して、追跡している範囲に自分で変更します。たとえば、インデックス 0 から開始し、メソッドが呼び出されるたびにインクリメントしますが、ボタンが押されない状態が X 秒間続くと、最初のインデックスにリセットされます。

それ以外の場合は、ラムの答えがうまくいくはずです!

于 2013-04-04T04:25:21.497 に答える