2012-08-06 5 views
0

iOS 개발자의 새로운 기능 내가 틀렸다면 나에게 정정 해 줄 수 있니?iOS 새 UIView를 표시하는 방법?

은 내가 UIWindow 있고, rootviewcontroller은 다음과 같습니다

@interface ViewController : UIViewController 
{ 
IBOutlet UIButton *but; 
} 

@property (nonatomic, strong) UIButton *but; 
-(IBAction) butButtonPressed; 

@end 

예 : 내가 루트 뷰 컨트롤러, 표시되는의 ViewController에서 사용할 수있는 UIView의로이의 ViewController를 한 경우. 알았어.

UIViewController에서 상속 된 새로운 클래스를 만들고 .xib 파일과 함께 만들었습니다.

그래서 XIB 파일 이름은 다음과 같습니다 view1.xib는

내 목표는 버튼을 누를 때이보기를 표시하는 것입니다.

이제 버튼을 만들고 버튼을 누르면 butButtonPressed가 호출됩니다. butButtonPressed의 내부에서 다음을 수행했습니다.

myViewController *vcontroler = [[ViewController alloc] initWithNibName:@"view1" bundle:nil]; 
    [self.view.window addSubview:vcontroler.view]; 

응용 프로그램이 충돌합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ? 친절하게 지적했다.

답변

1

이 ...

[self.view.window addSubview:vcontroler.view]; 

은 ... 정말 나쁜 전략이다 (그리고 난 심각 사람들이 의견을 표시하는 방법으로 그것을 찾는 어디 알고 싶어). 뷰 콘트롤러를 생성한다면 뷰 콘트롤러를 뷰를 벗어날 수있는 임시 콘테이너로 취급하는 대신에 그것을 사용해야한다.

vcontroler을 첫 번째 컨트롤러의 자식처럼 보이게하려면 (UINavigationController), pushViewController:animated:을 사용하십시오. 그렇지 않으면 presentModalViewController:animated:으로 모달로 표시 할 수 있습니다.

기존 디스플레이에보기 만 추가하려면 ViewController의 계층에보기를두고 표시/숨기기를 선택하십시오. 당신이 절대적으로 ViewController의 하위 컨트롤러로 있어야하는 경우

는 당신은 그것에 대한 참조를 유지하고 독자적인 컨트롤러 내부의 라이프 사이클을 관리해야합니다.

+0

필립, 답장을 보내 주셔서 감사합니다. "기존 디스플레이에보기 만 추가하려면 ViewController의 계층 구조에보기를 놓고 표시하거나 숨 깁니다." – Whoami

+0

이것으로, 뷰를'ViewController'의 .xib 파일 안에 서브 뷰로 추가하고 숨김으로 표시하는 것을 의미합니다. 버튼을 탭하면 뷰의'hidden' 속성이 NO로 설정됩니다. –

관련 문제