2012-02-03 4 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); 
    } 
} 

는 여기에 태그 0에서 객체의 UITextField,하지의 UIView 될 것으로 기대 콘솔 로그

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

입니다. 여기에 무슨 문제가 있습니까?

답변

3

모든보기의 태그는 기본적으로 0이므로 기본 UIView의 태그는 0이므로 사용자가 명시 적으로 태그를 설정하지 않은 다른보기도 0이됩니다.

태그에 오프셋 값을 사용하여 모든 태그를 고유하게 만들 수 있습니다. 예를 들어 :

#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

관련 문제