2012-02-03 57 views
1

我无法弄清楚这里有什么问题。请参阅上面的NSLog函数。以编程方式创建UITextFields

-(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

每个视图的标签默认为零,所以你的主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]; 
} 

现在,您可以参考第N个文本框与标签号码TEXTFIELD_TAG_OFFSET + N。这样,你的文本框都将有独特的标签。

+0

+1 This。我必须不止一次地做我自己的解决方案。 – Hyperbole 2012-02-03 16:25:14