2012-02-03 3 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]; 
} 

Теперь вы можете ссылаться на Nth текстового поля с номером тега TEXTFIELD_TAG_OFFSET + N. Таким образом, ваши будут все текстовые поля имеют уникальные тег.

+0

+1 Это. Решение, которое я должен был сделать сам не один раз. – Hyperbole

Смежные вопросы