2009-10-23 2 views
0

보기에 액세스해야하는 ViewController이 있다고 가정 해 봅니다. ViewController의 클래스 파일에서 나는iPhone : 코드에서 ViewController에서 뷰 객체에 액세스

IBOutlet ViewA *someview; 

를하고있는 중이 야 그리고 인터페이스 빌더에서, 나는 끌어 내 문서에 UIView을 삭제하고 ViewA에 클래스를 설정합니다.

IB를 통해 연결할 때 "stuff"가 인스턴스화되는 방법이 누락되었습니다. .xib 파일을 보관하지 않을 때 ViewA이 자동으로 할당됩니까? IB를 사용하고 싶지 않으면 어떻게합니까?

답변

1

대신 함께 IBOutlet이, 당신은 당신이보기를 필요로 할 때, 당신이, 당신의 코드 어딘가에 그럼 그냥

ViewA *someview; 

및 떠나, 그것을 제거하는 것이 퍼팅의, IB를 사용하지 않으려면 a

someView = [[UIView alloc] initWithFrame: rect]; 

나는 IB를 선호하지만 다른 사람들은 프로그래밍 방식으로보기를 만드는 것을 선호합니다. UIButtons, UILabels, UITableViews, 다른 UIViews 등 좌표 뷰를 사용하지 않고도 모든 뷰 subView를 배치하는 방법을 좋아합니다. YMMV.

XIB를 사용할 때 인스턴스가 생성되면 응용 프로그램이보기 컨트롤러를 느리게로드하고로드 된 후에보기가로드됩니다. 실제로보기를로드하는 것은 변수 someView에 처음 액세스 할 때입니다. 콘센트 연결이있는 동안 어떤 방식 으로든 someView에 액세스 할 때까지보기 및 해당 하위보기가로드되지 않습니다. 예를 들어 다음과 같이하십시오.

if (someview) { 
    // the view is loaded now 
} 
관련 문제