2011-06-12 3 views
0

나는 내 아이폰 앱에 약간의 문제가있다. (이전에 이미 objective-c를 해본 적이 있어도 아이폰 프로그래밍에 익숙하지 않다.)xview에서로드 된 UIView : 프레임/크기를 올바르게 설정하는 방법?

메인 윈도우에 centerView이라는 UIView가 있습니다. xib 파일과 연결된 UIViewController (여기서는 FooViewController이라고 함)의 싱글 톤 하위 클래스를 만들었습니다. 내 목표는 연결된 뷰를 하위 뷰 (centerView의 전체 프레임을 사용하는 centerView)로로드하는 것입니다.

문제점 : FooViewController가 제어하는보기는 수퍼 뷰의 프레임을 사용하지 않습니다.

나는 추가 시도 :

  • self.view.frame = self.view.superview.frame을 initWithNib의 "사용자 정의 초기화"부분에 ... 방법을 FooViewController

  • [[[FooViewController sharedController] view] setFrame:centerView.frame]의 내가 centerview에 뷰를 추가 할 때 ([centerView addSubView:[[FooViewController sharedController] view]]를) (나는이 줄의 전후에 시도했다)

그러나 나는 좋은 행동을 얻을 수 없다. ood 크기). 이러한 종류의 문제와 관련된 여러 가지 질문이 있지만 답변을 찾을 수 없습니다.

  • 어떻게 해결할 수 있는지 알고 계십니까?
  • [선택 사항] xib와 연결된 UIViewController의 인스턴스화가 어떻게 이루어 졌습니까? xib 이름이 표시된 리소스 파일이 있어야합니까? 아니면 클래스와 같은 이름의 xib를 찾습니까?

미리 도움을 주셔서 감사합니다.

답변

1

NIB에서로드 할 때보기는 초기화 컨트롤러가 아닌보기 컨트롤러의 loadView 메서드에서로드됩니다. 실제로는 loadView, esp. NIB에서로드하는 경우보기 컨트롤러의 viewDidLoad 메소드에서 # 1 (self.view.frame = self.view.superview.frame)을 시도해야합니다. 물론,이 명령문을 실행할 때까지 뷰가 수퍼 뷰에 추가되었는지 확인해야합니다. 또한이 시간까지 수퍼 뷰의 프레임이 올바르게 설정되었는지 확인해야합니다.

시도해 볼 수있는 또 다른 곳은 viewWillAppear:입니다. 대부분의 경우보기의 수퍼 뷰가 그때까지 제대로 설정되었을 것입니다.

+0

답변 해 주셔서 감사합니다. viewWillAppear 프레임 설정에 관한 코드를 넣으려고했지만 아무것도 할 것 같습니다. 사실 문제는 다른 부분에서옵니다. superview는 viewWillAppear에서도 null입니다 (그러나 self.view.superview.frame은 segfault를 생성하지 않습니다 ...). 나는이 점을 조사 할 것이다. – ThR37

+0

obj-c에서 수신자가 nil이면 모든 메서드를 허용하고 nil을 반환합니다 (생각합니다). 그래서 self.view.superview가 nil이더라도 segfault를 얻지 못합니다. –

관련 문제