2012-01-19 4 views
0

저는 iOS 개발을 처음 접했고 UIView에서 UIView에 액세스 할 수 있는지 궁금합니다.UIView 내부의 UIView에 액세스하는 방법

내 현재 설정은 UIView 인 주 UIViewController입니다. 그 안에서 UIView 나는 디버깅 정보를 표시하는 데 사용하는 작은 UIView 있습니다. 내가 뭘하고 싶은지 어떻게 든 볼 수 있도록 볼 수 있도록 할 수 있도록/내가 논리 오류를 디버깅하려는 경우 배경색을 변경해야 할 때 또는 그것을 숨길 수 있습니다.

self.view를 사용하여 액세스하려고 시도했지만 부모보기 만 제공합니다. 다양한 사이트와 튜토리얼에서 서브 뷰에 추가하고 작업해야하는 것을 보았습니다.하지만 그렇게하면 뷰가 0x0으로 설정됩니다. 또한 IBOutlet을 사용해야하고 IB에서 어딘가에 참조 할 필요가 있음을 알았지 만, 내 컨트롤러의 헤더 파일에 정의 된 IB 객체의 객체를 볼 수 없으므로이를 수행하는 방법이 없습니다. .

모든 조언을 주시면 감사하겠습니다.

답변

4

당신은 IB를 통해 두 번째의 UIView에 액세스하려면 다음을 확인

  • 는 (물론 그것을 합성) @property (nonatomic, retain) IBOutlet UIView *myView와의 ViewController에서 출구를 만들 루트보기
  • 에 인터페이스 빌더에 추가됩니다 확인
  • 인터페이스 빌더의 File 's Owner에서 새로 만든 콘센트에보기를 연결하십시오.
  • Voila! 지금은 일을해야 - (모두의 올바른, 그것은 nil이 아닌 값을 갖게됩니다 경우) 단지 self.myView으로보기에 액세스
+0

+1 좋은 간결한 답변 – Sam

+0

완벽! 정말 고맙습니다. 나는 File 's Owner와 함께 할 수 있다는 것을 몰랐다. – Seb

1

가장 쉬운 방법은 ViewController의 .h 파일에 IBOutlet을 설정 한 다음 해당 포함 된 뷰 (또는 서브 뷰)를 해당 IBOutlet에 연결하는 것입니다.

그런 다음 언제든지 hidden 속성을 설정하거나 해제 할 수 있습니다.

"소스 코드로 직접 연결 만들기"섹션에 특히주의하면서 Xcode 4로 사용자 인터페이스를 디자인하는 방법을 설명하는 this Apple documentation을 확인하십시오.

+0

+1 설명을 드리기 위해 노력 하긴했지만, 필자는 문서가 지적한 것처럼보고 배울 수있는 최적의 장소라고 생각합니다. 아마 비디오가 도움이 될 수도 있습니다. – Sam

+0

비디오가 많은 도움이되는 동안. 사무실에서 보는 것은 조금 어렵습니다. – Seb

0

documentation for UIView를 살펴 보자. 보기의 내용에 액세스 할 수있는 여러 가지 메소드가 있음을 알게 될 것입니다. 예를 들어 subviews 속성은 모든보기의 하위보기 배열을 제공합니다. -viewWithTag: 메서드는 지정된 태그가있는 하위 뷰에 대한 포인터를 반환합니다.

뷰 계층 구조가 .xib 파일 또는 스토리 보드에서 생성되는 경우, 계층 구조의 다양한 멤버에 액세스하는 일반적인 방법은 다음과 같습니다. 컨트롤러에 콘센트 (등록 정보는 IBOutlet)를 만들고 해당 콘센트를 .xib의 적절한보기에 연결하십시오. 그런 다음 .xib가로드 될 때 콘센트에 올바른보기 포인터가 채워집니다. 당신이 코드에서 서브 뷰를 작성하는 경우

0

, 당신은 아이 UIViewframe (기원 & 크기)를 설정하고 [self.view addSubview:myChildView]을 수행 할 것입니다. 속성이나 ivar을 사용하여이 uiview를 추적하여 나중에 숨기도록 참조 할 수 있습니다.

xib 파일을 사용하고 있고 xib 안에 하위보기를 정의한 경우 예를 들어 요소를 참조하도록 IBOutlet을 정의 할 가능성이 큽니다. 같은 뭔가 : 구현 내부

@property (nonatomic, retain) IBOutlet UIView * myChildView; 

은 당신이 원하는 것 : 당신이 당신의 XIB에 약간의보기에 그 출구를 할당해야합니다

@implementation MyCoolViewController 

@synthesize myChildView = _myChildView; 

-(void) dealloc 
{ 
    // make sure to release reference so the property gets cleaned up 
    [_myChildView release], _myChildView = nil; 
    [super dealloc]; 
} 

-(void)someFunc 
{ 
    self.myChildView.hidden = YES; // or NO 
} 

인터페이스 빌더의 내부. 일반적으로 "소유자"를 선택하여이 작업을 수행 한 다음 연결 관리자에서 속성 이름을 클릭하고 속성 이름을 할당 할 UIView로 드래그합니다.

1

주어진 답은 여기에 또 다른 방법은, 좋은 :

UIView * viewToGet = [theMainView viewWithTag:1] 

당신은 IB에 태그를 지정할 수 있습니다 : 뷰를 태그 (int로, 예를 들어 "1")와 같은 나중에 액세스를 제공합니다 뿐만 아니라 코드에서.

관련 문제