우선 HeadViewController
클래스에 view
콘센트를 정의 할 필요가 없습니다. UIViewController
수퍼 클래스에서 자동으로 상속됩니다.
그런 다음 HeadViewController
보기를 현재보기에 직접 추가하는 것이 좋습니다. 예 : 당신은 ARC (자동 참조 카운팅)를 사용하는 경우
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];
headViewController.view.frame = CGRectMake(0, 0, 320, 120);
[self.view addSubview:headViewController.view];
}
그러나이의 headViewController
인스턴스는 아마도 viewDidLoad
방법이 끝난 후 해제됩니다. 현재 표시하고있는 컨트롤러의 로컬 변수에 해당 인스턴스를 할당하는 것이 편리합니다 (강제적이라고 말하고 싶습니다). 이 방법을 사용하면 나중에 필요할 때 뷰 구성 요소를 처리 할 수 있으며 인스턴스는 유지되며 나머지는 완벽하게 작동합니다. .m
클래스 구현 파일의 시작 부분에 숨겨진 인터페이스 정의에
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];
headViewController.view.frame = CGRectMake(0, 0, 320, 120);
[self.view addSubview:headViewController.view];
}
및
@interface MyController()
@property (nonatomic, strong) HeadViewController *headViewController;
@end
: 당신은 뭔가를해야한다.
그것은 오타 같다
나는 당신을 정정한다 : headviewController.view는 서브 뷰로 추가되지 않으면 nil이다. addsubview를 바꾸고 프레임을 설정해야합니다. – NeverBe
ARC에 대한 업데이트를 확인하십시오. 'headViewController.view'가'nil' 인 경우, nib 파일의 컨트롤러와 뷰의 연결을 다시 확인하십시오. 이 방법 (배출구 문제) 또는 완료 후 (ARC 문제) '안돼'입니까? – marzapower
기본 코드를 삭제 했으므로 코드를 변경했습니다. 본인이 말한 것처럼보기를 정의합니다. 그리고 아직 headViewController.view가 없습니다 ... 혼란 스러워요. – jxdwinter