0

xcodeでアプリを操作しています。問題で立ち往生しています。テーブルビューを作成し、3つのtextFieldsとLabelsを表示するセルを作成しました。私はコーディングとタグ付きのtextFieldsの割り当てを通じてそれを行いました。TextFields KeyboardはNumPadなので、キーボードを閉じるためのツールバーを追加しました。ツールバーには、キャンセルと完了の2つのボタンがあります。キャンセルボタンをタップすると、最後のtextFieldを除くすべてのtextFieldで機能しません。

親切に私を助けてください。

これが私のコードです。

    for (int i = 0; i < 3; i++) {


        mainTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, (80 + (i * 60)),               280, 30)];        
        mainTextField.borderStyle = UITextBorderStyleRoundedRect;
        mainTextField.textColor = [UIColor blackColor]; 
        mainTextField.font = [UIFont systemFontOfSize:17.0]; 
        mainTextField.backgroundColor = [UIColor whiteColor]; 
        mainTextField.autocorrectionType = UITextAutocorrectionTypeNo;   
        mainTextField.backgroundColor = [UIColor clearColor];
        mainTextField.keyboardType = UIKeyboardTypeNumberPad;
        mainTextField.keyboardType=UIKeyboardTypeDecimalPad;
        mainTextField.returnKeyType = UIReturnKeyDone;  
        mainTextField.tag= i+1;
        mainTextField.delegate=self;

           [self.mainTableView  addSubview:mainTextField];

           self. numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
           self. numberToolbar.barStyle = UIBarStyleBlackOpaque;
           self. numberToolbar.items = [NSArray arrayWithObjects:
                                   [[UIBarButtonItem alloc]initWithTitle:@"Cancel"   style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)],
                                   [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                                   [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
                                   nil];
           [self.numberToolbar setTag:i+1];
            [self.numberToolbar sizeToFit];

            mainTextField.inputAccessoryView = numberToolbar;


            mainTextField.clearButtonMode = UITextFieldViewModeWhileEditing;

        mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 55+(i*60), 280, 18)];
        mainLabel.backgroundColor = [UIColor clearColor];
        mainLabel.textAlignment = UITextAlignmentLeft;
        mainLabel.tag= i+1;

        {
            mainLabel.text = [passedValue objectAtIndex:[mainLabel tag]-1];             

        [self.mainTableView addSubview:mainLabel];
        [self configureView];

} 
    } 

   -(void)cancelNumberPad{

    switch ([self.numberToolbar tag]) {
        case 1:
            [mainTextField resignFirstResponder];
            break;
        case 2:
            [mainTextField resignFirstResponder];
            break;
        case 3:
            [mainTextField resignFirstResponder];
            break;
        default:
            break;
    }

    mainTextField.text = @"";
}



-(void)doneWithNumberPad {

        NSString *numberFromTheKeyboard = mainTextField.text;
        [mainTextField resignFirstResponder];
    }
4

2 に答える 2

1

[self.numberToolbarタグ]を呼び出すキャンセルボタンを押すと、タグは常に3になります。self.numberToolbarというツールバーのプロパティがあり、そのプロパティは1つのツールバーへの参照のみを保持します。

// This loop runs three times, and it just changes the tag of the self.numberToolbar.
// self.numberToolbar is only 1 toolbar and you just keep changing it's tag, the loop stops at
// 2 so the tag is 2 + 1, which is 3.
for (int i = 0; i < 3; i++) {

    [self.numberToolbar setTag:i+1];
}

代わりに、テキストフィールドごとにプロパティまたはインスタンス変数を作成するだけです。

@property (nonatomic, retain) UITextField *textFieldOne;
@property (nonatomic, retain) UITextField *textFieldTwo;
@property (nonatomic, retain) UITextField *textFieldThree;

これで、各テキストフィールドへの参照ができたので、タグプロパティを設定する必要はありません。必要なのはツールバーだけです。ビューに追加して、呼び出されたときにキーボードの上に表示するだけです。

キャンセルボタンを押すと、すべてのテキストフィールドを辞任するだけで、そのテキストフィールドが現在使用されているかどうかは関係ありません。

プロパティまたはインスタンス変数は、タグのプロパティを設定するよりもはるかにクリーンで簡単です。

于 2012-08-27T00:40:45.747 に答える
0

別の方法は、ビューのすべてのサブビューを調べて、それがUITextFieldであるかどうかを確認し、そうである場合はそれを閉じることです。何かのようなもの

-(void)myToolbarAction
{
for(int i=0;i<self.view.subviews.count; i++)
{
if([[self.view.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]
    [[self.view.subviews objectAtIndex:i] resignFirstResponder];
}

それが役に立てば幸い

于 2012-08-27T08:51:54.340 に答える