2012-02-03 5 views
1

ここで何が間違っているのか分かりません。 NSLog関数の上のコメントをご覧ください。ここでプログラムでUITextFieldを作成する

-(void)loadView 
{ 
    ......  
    int x_position = 10; 
    for (self.x = 0; self.x < 3; self.x++) 
    { 
     self.textField = [[UITextField alloc] initWithFrame:CGRectMake(10, x_position, 300, 25)]; 
     self.textField.tag = self.x; 
     // Output 0, 1, 2 
     NSLog(@"%d", self.x); 
     x_position += 40; 

     [self.view addSubview:self.textField]; 
    } 


    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn addTarget:self action:@selector(showNames) forControlEvents:UIControlEventTouchDown]; 
    [btn setTitle:@"Remove from view" forState:UIControlStateNormal]; 
    btn.frame = CGRectMake(0, x_position + 30, 210, 50); 

    [self.view addSubview:btn]; 
    [self.textField release]; 
    [self.view release]; 
} 

-(void)showNames 
{ 
    while (self.x > 0) { 
     self.x--; 
     // output 2, 1, 0 
     NSLog(@"%d", self.x); 
     NSLog(@"%@", tmp); 
    } 
} 

は、コンソールログ

<UITextField: 0x4b39410; frame = (10 90; 300 25); text = 'Ad'; clipsToBounds = YES; opaque = NO; tag = 2; layer = <CALayer: 0x4b38c30>> 
<UITextField: 0x4e22320; frame = (10 50; 300 25); text = 'Asd'; clipsToBounds = YES; opaque = NO; tag = 1; layer = <CALayer: 0x4e0a4c0>> 
<UIView: 0x4b32330; frame = (0 20; 320 460); layer = <CALayer: 0x4b329a0>> 

である私は、タグ0でオブジェクトがUITextFieldの、ないのUIViewことを期待しています。 ここで何が間違っていますか?

答えて

3

すべてのビューのタグのデフォルト値は0です。したがって、メインのUIViewのタグはゼロになり、明示的にタグを設定しなかった他のビューもゼロになります。

タグにオフセット値を使用することをお勧めします。すべてのタグを一意にすることができます。たとえば:

#define TEXTFIELD_TAG_OFFSET 100 

for (self.x = 0; self.x < 3; self.x++) 
{ 
    self.textField = [[UITextField alloc] initWithFrame:CGRectMake(10, x_position, 300, 25)]; 
    self.textField.tag = self.x + TEXTFIELD_TAG_OFFSET; 
    // Output 0, 1, 2 
    NSLog(@"%d", self.x); 
    x_position += 40; 

    [self.view addSubview:self.textField]; 
} 

今、あなたは、タグ番号TEXTFIELD_TAG_OFFSET + Nとあなたのテキストフィールドは、すべてのユニークなタグを持つことになりますそのようにN番目のテキストフィールドを参照することができます。

+0

+1これです。解決策私は自分自身を何度もやらなければならなかった。 – Hyperbole

関連する問題