2

別のオブジェクト名で動的UITextFieldを作成したい。テキストフィールドを動的に作成するための以下のコードを示した。異なるオブジェクト名で各テキストフィールドを作成するにはどうすればよいですか?

for (int x=0; x < 4 ; x++)
    {

        CGRect txtFldFrame;
        if (x==0) 
            txtFldFrame=CGRectMake(385, 620, 278, 45);
        else
            txtFldFrame=CGRectMake(385, txtFldFrame.origin.y+60, 278, 45);
        [self createTxtImg:txtImgFrame createTextfield:txtFldFrame];
    }

createTextfield:(CGRect)txtfldframe {

   UITextField *txtFld1=[[UITextField alloc]init];
txtFld1.frame=txtfldframe;
[txtFld1 setTag:textChk];
txtFld1.borderStyle = UITextBorderStyleNone;
txtFld1.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
txtFld1.textAlignment=UITextAlignmentLeft;
txtFld1.textColor=[UIColor colorWithRed:17/255.0 green:61/255.0 blue:83/255.0 alpha:1];
txtFld1.font = [UIFont systemFontOfSize:22];
txtFld1.backgroundColor = [UIColor clearColor];
txtFld1.autocorrectionType = UITextAutocorrectionTypeNo;
txtFld1.returnKeyType = UIReturnKeyDone;
txtFld1.clearButtonMode = UITextFieldViewModeWhileEditing;
txtFld1.autocapitalizationType=UITextAutocapitalizationTypeNone;
txtFld1.delegate = self;
[subScrollView addSubview:txtFld1];

}

4

3 に答える 3

6

別の(一意の名前)テキストフィールドを作成する理由はまったくありません。一意の名前が必要な理由は、コードの後半でそれらにアクセスして値を編集できるようにするためですが、ここにトリックがあります。一意のタグ番号を使用します。

次に例を示します。

for (int i=0; i<4; i++) {
    UITextField *myTextfield = [[UITextField alloc] initWithFrame:CGRectZero];
    myTextField.tag = 200+i;
    [self.view addSubview:myTextField];
}

これで、タグ200、201、202、203を持つ4つのテキストフィールドが作成されました。

たとえば、コードの後半で2番目のテキストフィールドを参照する場合、実行する必要があるのは次のとおりです。

UITextField *myTextField = (UITextField *)[self.view viewWithTag:201];

これでコントロールができ、何でも取得または設定できます...

予防策として、次を使用して、実際にUI要素を取得したことを確認することをお勧めします。

if (!myTextField)
   return;
于 2012-07-24T14:07:00.387 に答える
0

次のコードを使用してテキストボックスを作成します。

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(150, 12, 120, 25)];
[self.view addSubview:textField];

別のテキストボックスの場合は、オブジェクト名(textField)を変更するだけです。

于 2012-07-24T11:16:38.410 に答える
0

あなたがあまり情報を与えなかったので、私はすべてを理解していません。

複数のUITextFieldを初期化する場合:

UITextField *myTextField1 = [[UITextField alloc] init];  
UITextField *myTextField2 = [[UITextField alloc] init];  
UITextField *myTextField2 = [[UITextField alloc] init];

等々...

これをランダムベースまたはループベースで実行する場合は、次のようなランダムキーを使用してオブジェクトをループして辞書に配置することをお勧めします。

NSMutableDictionary *myDict = [NSMutableDictionary dictionary];
for (int i=0; i<20; i++) {
    UITextField *myTextfield = [[UITextField alloc] initWithFrame:CGRectZero];
    [myDict setObject:myTextfield forKey:[NSString stringWithFormat:@"myTextfield%d", i]];
    [myTextfield release];
}

NSLog(@"Dict: %@",myDict);
于 2012-07-24T11:41:02.533 に答える