2010-07-15 3 views
1

나는 버튼 클릭에 제거하고 다시 추가 그래서 그것을이iPhone - 하위보기를 제거하고 다시 추가, [self.views subviews] objectAtIndex가 변경 되나요?

SelectionScreenTable *viewController =[[SelectionScreenTable alloc]initWithNibName:@"SelectionScreenTable" bundle:nil]; 
viewController.view.bounds = CGRectMake(0,0,955,520); 
viewController.view.center = CGPointMake(528, 379); 

UIView *CV = [UIView alloc]; 
CV = [[self.view subviews]objectAtIndex:3]; 
[CV removeFromSuperview]; 
[CV release]; 

[self.view addSubview:viewController.view]; 

같은 다른 일을 작성했다하고자 이제 서브 뷰 programmtically

SelectionScreenTable *aSelectionScreenTableViewController = [[SelectionScreenTable alloc] initWithNibName:@"SelectionScreenTable" bundle:[NSBundle mainBundle]]; 

aSelectionScreenTableViewController.view.bounds = CGRectMake(0,0,955,520); 
aSelectionScreenTableViewController.view.center = CGPointMake(528, 379); 

[self.view addSubview:aSelectionScreenTableViewController.view]; 

을 addes보기를 원해야 함 작동하지만 내가 발견 한 한 가지는 제거되고 다시 추가되었을 때입니다. the

[self.view subviews] objectAtIndex : 3 인덱스가 변경된 것 같습니다? 왜냐하면 난 단지 응용 프로그램이 충돌하기 전에 특정 횟수를 클릭 할 수 있습니다.

그렇다면 버튼을 클릭 할 때마다 변수 + 1을 증가시키고 objectAtIndex : variable을 사용해야합니까?

답변

3

인덱스를 사용하면 장기적으로 약해져서 사용하지 않는 것이 좋습니다.

한 가지 방법은 objectAtIndex를 사용할 필요가 없도록 멤버 변수에 뷰에 대한 포인터를 유지하는 것입니다.

또 다른 방법은 이렇게하는 것입니다 :

[CV setTag:5]; 

을 대신 objectAtIndex, 사용의 :

[self.view withWithTag:5]; 

('5'는 인해 임의 선택입니다 - 그것은 당신의 프로그램 내에서 고유 번호이어야한다 #define 또는 enum을 사용하여 값을 저장하는 것이 가장 좋습니다 - 예 : #define MY_VIEW_TAG 5 및 setTag : MY_VIEW_TAG 등)

+0

위대한! 한 가지 질문은 현재보기에서 태그가 달린보기를 어떻게 제거합니까? 왜냐하면 나는 [CV removeFromSuperView]를 사용하지 않는다. – Kenneth

+0

[CV removeFromSuperView]를 여전히 사용할 수 있다고 생각 하나? 그렇지 않으면 [[self.view viewWithTag : 5] removeFromSuperView]가 – JosephH

+0

을 실행해야합니다. 큰. 그것은 일했다. 고마워 친구 – Kenneth

관련 문제