2

複数の UITextFields を持つアプリに取り組んでいます。1 つの UITextField について、デリゲートを自分自身に設定し、デリゲート メソッドを呼び出しています。

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

特定のタスクを実行します。ただし、同じ画面に他の UITextFields があり、まったく異なることをしたいのですが、この場合は、入力する文字数を 2 つに制限します。残念ながら、これが可能であることをオンラインで見た唯一の方法は、上記の方法を使用して制限を行うことです. 上記の方法をすでに使用して、別の UITextField に対してまったく異なることを行っている場合、これはまだ可能ですか?

記録のために、デリゲート メソッドの現在の実装を次に示します。

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

    if([[string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]]
        isEqualToString:@""])
        return YES;

    NSString *previousValue = [[[textField.text stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] stringByReplacingOccurrencesOfString:@"." withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@""];
    string = [string stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
    NSString *modifiedValue = [NSString stringWithFormat:@"%@%@", previousValue, string];

    if ([modifiedValue length] == 1) {

        modifiedValue = [NSString stringWithFormat:@"0.0%@", string];

    }

    else if ([modifiedValue length] == 2) {

        modifiedValue = [NSString stringWithFormat:@"0.%@%@", previousValue, string];

    }

    else if ([modifiedValue length] > 2) {

        modifiedValue = [NSString stringWithFormat:@"%@.%@",[modifiedValue substringToIndex: modifiedValue.length-2],[modifiedValue substringFromIndex:modifiedValue.length-2]];

    }


    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:modifiedValue];
    modifiedValue = [formatter stringFromNumber:decimal];
    textField.text = modifiedValue;

    return NO;

}
4

5 に答える 5

2

両方のテキストフィールドをクラスのプロパティとして使用してください。たとえば、これがコントローラーのインターフェースであるとします。

@interface YourViewController : UIViewContoller <UITextFieldDelegate> {
}

/*
* other properties
*/
@property(nonatomic, retain) UITextField *firstRestrictionTextField;
@property(nonatomic, retain) UITextField *yourSecondTextField;

@end

実装では、両方のテキスト フィールドをクラスのデリゲートとして設定する必要があります。

self.firstRestrictionTextField.delegate = self;
self.yourSecondTextField.delegate = self;

また、デリゲート メソッドを実装すると、次のようになります。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField == self.firstRestrictionTextField) {
// Do stuff you need in first textfield
}
if (textField == self.yourSecondTextField) {
// Do stuff for your second textfield
}

}
于 2013-03-29T02:38:33.050 に答える
1

UITextFieldクラスにプロパティを作成します。

@interface MyObject ()
@property (nonatomic, retain) UITextField *textField1;
@end

次にデリゲート メソッドで、テキスト フィールドが保存したものと同じであることを確認します。

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

    if (textField == [self textField1]) {
        // do stuff here
    } else {
        // do stuff here for other text fields
    }

    . . .
}
于 2013-03-29T02:36:51.900 に答える
0

これと同じ方法を使用します。最初の部分を参照してください。

- (BOOL)textField:(UITextField *)textField

このメソッドを使用すると、どの textField がこのデリゲート メソッドをトリガーしているかを識別できます。次に、さまざまな textField に対してさまざまなタスクを実行するためのロジックを実行する必要があります。

お気に入り:

if (textField1){action 1}
else if (textField2){action 2}
else {default action}
于 2013-03-29T02:35:13.600 に答える
0

テキスト フィールドを宣言します。

    @property(nonatomic, strong)UITextField *textField1;
    @property(nonatomic, strong)UITextField *textField2;
    //etc

タグを付けます:

self.textField1.tag = 1;//or whatever
self.textField2.tag = 2;//or whatever
//etc

次に、 でtextField:shouldChangeCharactersInRange:、テストと動作の変更を行うことができます。

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

if(textField.tag == 1){
//textfield1
}
//etc
}
于 2013-03-29T02:42:06.307 に答える
-1

UITextField ごとに異なるタグを設定し、特定の UITextField のtextField.tagを取得して、デリゲート メソッドの動作を定義できます。

于 2013-03-29T02:35:49.123 に答える