2012-06-15 6 views
4

펜촉에있는 모든 내보기를 찾고 내 컨텐츠보기에 추가하려고합니다.한보기에서보기를 제거하고 다른보기에 추가하십시오.

이 그것은 성공적으로 self.view에서보기를 제거하지만 그것이 어떤 도움을 주시면 감사하겠습니다

for (UIView *view in self.view.subviews) { 
    if (view.tag != 666) { 
     [view removeFromSuperview]; 
     [self.contentView addSubview:view]; 
    } 
} 

self.contentView에 추가하지 않습니다, 내가 가지고있는 것입니다.

+0

'self.contentView'가 nib에 링크되어 있고 nil이 아닌지 확인 했습니까? – tia

+0

self.contentView가 상속됩니다. 펜촉에서 나온 것이 아닙니다. –

답변

0

잘 될지 모르겠지만 전환 시도는 [view removeFromSuperview];[self.contentView addSubview:view];입니다. UIView Class Reference에 따르면 removeFromSuperview은 수퍼 뷰가보기를 해제하기 때문입니다.

희망이 도움이됩니다.

+1

대신이 일을하는 것이 좋습니다 [보기 유지]; [보기 removeFromSuperview]; [self.contentView addSubview : view]; [보기 릴리스]; 뷰가 2 개의 슈퍼 뷰를 가질 때 removeFromSuperview를 호출하면 이상하게 끝날 수 있습니다. –

+0

아마 맞을 것입니다. 사실 그것은 클래스 참조에서 비슷한 것을 말합니다. 감사합니다 – pasawaya

+1

어느 쪽이든 대신, 그냥 제거에 대한 코멘트. 새로운 수퍼 뷰에 추가하면 superview 속성을 덮어 씁니다. 그러나 모든 경우에 문제는 새로운 부모가 다른 이유 때문에 nil이거나 숨겨져 있기 때문입니다. – danh

0

오류를 확인하십시오. 이러한보기의 프레임을 인쇄하는 것이 좋습니다 (self.view, self.contentView). 을 입력하고 색상을 변경하십시오. 그러면 버그를 볼 수 있습니다. 행운을 비네!

0

contentViewUIVew의 재산에 속하지 않습니다. 그것은 UITableViewCell의 재산에 속한다. 셀 객체의 내용보기를 반환합니다.

+0

이것은 UITableViewCell이 아니며 contentView를 만든 것이기 때문에 상속되지 않습니다. –

0
for (UIView *v in innerMainView.subviews) 
    { 
     [v removeFromSuperview]; 
    } 
    [innerMainView addSubview:StandardView]; 
0

지정된보기를 속성으로 설정하거나 내용보기에보기를 추가 한 다음 수퍼보기에서 제거 할 수 있습니다. 뷰를 지울 때 뷰의 보유 수를 0으로 줄이면 수퍼 뷰를 호출하여 dealloc을 호출합니다.

+0

보유 수는 수퍼 뷰에서 제거한 후에도 1입니다. –

4

코드의 문제는 removeFromSuperview으로 전화하면보기가 부모보기에 의해 해제됩니다. removeFromSuperview을 호출 할 필요가 없습니다. 다른보기의 하위보기로 추가하면 현재보기에서 제거됩니다.

그래서 사용

for (UIView *view in self.view.subviews) 
{ 
    if (view.tag != 666) 
    { 
     [self.contentView addSubview:view]; 
    } 
} 

UIView Class Reference에 따르면

addSubview :

가 파단의 수신기의리스트의 마지막에보기를 추가합니다.

- (void)addSubview:(UIView *)view

파라미터

보기

The view to be added. This view is retained by the receiver. After being added, this view appears on top of any other subviews. 

이 방법은 볼을 보유하고 수용하도록 그 다음 응답을 설정 토론

새로운 슈퍼 뷰인 입니다.

보기에는 수퍼 뷰가 하나만있을 수 있습니다.보기에 이미 수퍼보기가 있고보기에 수신기가 없다면 이 방법은 이전 수 신자 수퍼 뷰를 제거한 다음 수퍼바이저의 새로운 수퍼 뷰를으로 만듭니다.

0

당신이 superView에서보기를 제거하면 그것은 memory에서 release 것이다. 따라서 귀하는 다음을 수행해야합니다 :

UINib *infoNib = [UINib nibWithNibName:@"YourXIBFileName" bundle:nil]; 

NSArray *topLevelObjects = [infoNib instantiateWithOwner:self options:nil]; 

UIView *infoView = [topLevelObjects objectAtIndex:0]; 
for (UIView *view in infoView.subviews) { 
     [self.contentView addSubview:view]; 
    } 
} 
관련 문제