2011-03-10 6 views
0

하위 뷰를 처리하는 방법을 배우고 그 중 하나의 위치를 ​​쉽게 조작하지 못하고 있습니다. 각 하위보기에는 고유 한 태그가 있습니다. UITableCell에서 하위 뷰를 검색 중이므로 UITableView에는 약 5 개의 행이 있습니다.UIView 하위보기가 변경에 응답하지 않습니다.

나도이 할 경우

UIView *mike = [self.view viewWithTag:6]; 
mike.frame = CGRectMake(250, 5, 25, 20); 
mike.backgroundColor = [UIColor redColor]; 
NSLog(@"mike=%@ tag=%d",[[mike class] description], [mike tag]); 

또는 :

UILabel *label = (UILabel *)[self.view viewWithTag:6]; 
label.frame = CGRectMake(250, 5, 25, 20); 
label.backgroundColor = [UIColor redColor]; 
NSLog(@"label=%@ tag=%d",[label text], [label tag]); 

하위 뷰 나는이 작업을 수행 아래의 코드를 사용하여 검색 그러나 경우, 위치를 변경하지 않습니다.

for (UIView *subview0 in [self.view subviews]) 
{ 
    for (UIView *subview1 in [subview0 subviews]) 
    { 
    for (UIView *subview2 in [subview1 subviews]) 
    { 
     if ([[[subview2 class] description] isEqualToString: @"UILabel"]) 
     { 
     [subview2 setText:@"mike"]; 
     subview2.frame = CGRectMake(250, 5, 25, 20); 
     subview2.backgroundColor = [UIColor redColor]; 
     } 
    } 
    } 
} 

도움을 주시면 감사하겠습니다.

마이크

EDIT : 53 :

2011-03-10 19에 실행 콘솔 마이크 = 42.344 UILabel의 태그 = 6 0x4b59610
2011-03-10 19 : 53 : 42.344 라벨 태그 = 842 = 6 0x4b59610
2011-03-10 19 : 53 : 42.345 0 하위 뷰 = PerformAnalysisCustomCell 태그 = 0
2011-03-10 19 : 53 : 42.345 1 서브 뷰 = UIGroupTableViewCellBackground 태그 = 0
2011-03-10 19 : 53 : 42.346 2-subview = UIView tag = 0 0x4d62910
2011-03-10 19 : 53 : 42.349 1-subview = UITableViewCellContentView tag = 0
2011-03-10 19:53 : 42.349 2-subview = UILabel 태그 = 0 0x4b51320
2011-03-10 19 : 53 : 42.350 2-subview = UILabel 태그 = 1 0x4b59290
2011-03-10 19 : 53 : 42.350 2-subview = UILabel 태그 53 : 2 = 0x4b59370
2011-03-10 19 42.358 2- 하위 뷰 = UILabel의 태그 = 3 0x4b59410
2011-03-10 19 : 53 : 42.359 2 서브 뷰 = UILabel의 태그 = 4 0x4b594b0
2011-03 -10 19 : 53 : 42.360 2-subview = UILabel 태그 = 5 0x4b59560
2011-03-10 19 : 53 : 42.360 2-subview = UILabel tag = 6 0x4b59610

NSLog에 % p를 입력하면 메모리 주소 주소가 동일 할 수 있습니다. 다른 태그 = 6 라인은 다른 주소를 가지므로 적어도 그 셀은 움직일 것으로 예상해야합니다.

+1

self.view는 tableView입니까? 모든 표 셀에서도 태그가 고유합니까? 라벨에 태그를 어디에 설정하고 있습니까? – GendoIkari

+0

예. 각 태그는 셀에 고유하지만 표 셀이 반복 될 때 전체 표가 아닙니다. IB에서 태그를 설정하고 있습니다. – hydev

+0

아 ... 그러면 전체 tableView가 아니라 단지 1 개의 셀에서 viewWithTag를 수행해야합니다. tableView에서 viewWithTag를 수행하면 해당 레이블의 첫 번째 인스턴스 만 가져옵니다. – GendoIkari

답변

0

전체 tableView가 아닌 ​​각 셀에서 viewWithTag 문을 실행해야합니다. 이 값은 cellForRowAtIndexPath에 설정되어야하며 필요할 때 변경된 행을 다시로드합니다.

0

하위 클래스 인 UITableViewCell을 선호하기 때문에 속성별로 원하는 항목에 액세스 할 수 있습니다. -viewWithTag :을 좋아하지 않으므로 이전에는 문제가 발생하여 관리하기가 어려웠습니다.

0

처음 두 예제는 똑같은 것을합니다. 정적 형식 (UIView * 대 UILabel *)은이 경우 컴파일러에서 생성하는 코드를 변경하지 않습니다.

세 번째 예제는 NSLog가 작동하는 각보기에서 수행해야합니다. 태그가 설정되지 않았을 수 있습니다.

if (subview2.tag == 6)과 같은 태그로 여러 개의보기가 있는지 확인하는 것이 좋습니다.

로그 메시지는 사용중인보기가 동일한 지보기 위해보기 설명 (또는 단순히 "% p"형식의보기 주소)을 인쇄 할 수도 있습니다.

+0

감사합니다. 위의 출력을 추가했습니다. 여기서 주소를 볼 수 있으며 동일한 주소로 적어도 하나의 하위보기가 나타납니다. 그러므로 그것은 바뀌어야합니다 - 그렇지 않아야합니까? – hydev

+1

하나 이상의 하위보기가 같은 주소를 가지고 있지만 변경 사항을 볼 수있는 하위보기 중 하나가 아닐 수도 있습니다. "각 하위 뷰에 고유 태그가 있음"이라는 초기 주장은 호출중인 뷰에 대해 잘못된 것입니다. -viewWithTag : on (셀 대신 테이블 뷰에서 호출하고 있습니까?) –

관련 문제