2013-03-04 8 views
22

스토리 보드가있는 앱이 있습니다. 선택한 항목에 따라 테이블보기에서 선택하기 위해 여러 뷰 컨트롤러를 사용하고 있습니다. 나는 페이지가 스토리 보드의 하나 이상의 뷰 컨트롤러가 될 페이지 뷰 컨트롤러를 원한다. 나는 페이지 뷰 컨트롤러를 init과 같이하려고 시도하고 있습니다 : .... self.dataSource = self;페이지 뷰 컨트롤러에서 스토리 보드의 View Controller를 프로그래밍 방식으로 사용하기

UIViewController *initialViewController =[self viewControllerAtIndex:current]; 
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; 


[self setViewControllers:viewControllers direction:UIPageViewControllerNavigationOrientationHorizontal animated:NO completion:nil]; 
.... 

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
if ((descriptions.count == 0) || 
    (index >= descriptions.count)) { 
    return nil; 
} 

current=index; 

// Create a new view controller and pass suitable data. 
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Description *description=[DBCompany getDescriptionById:language descriptionId:[[descriptions objectAtIndex:index] integerValue]]; 

UIViewController *viewController=nil; 
if(description.frame==100){ 
    viewController=[[Company100ViewController alloc] init]; 
    ((Company100ViewController*)viewController).companyId = companyId; 
} 
return viewController; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
if ((descriptions.count == 0) || 
    (current-1 < 0)) { 
    return nil; 
} 

return [self viewControllerAtIndex:current-1]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
if ((descriptions.count == 0) || 
    (current >= descriptions.count)) { 
    return nil; 
} 

return [self viewControllerAtIndex:current+1]; 
} 

그러나 viewcontroller은 검은 색으로 표시됩니다. 나는 UIviewcontroller 클래스를 추가하고 있는데 스토리 보드와 관련하여 어떤보기 (XIB)에도 연결하지 않기 때문에 생각합니다.

페이지 뷰 컨트롤러에서 스토리 보드의 다른보기 컨트롤러를 프로그래밍 방식으로 사용하려면 어떻게해야합니까?

답변

53

viewController = [[Company100ViewController alloc] init]을 누른 경우 스토리 보드 또는 XIB와 연결된 컨트롤러가 아닙니다. XIB와 컨트롤러를로드하려면 다음을 수행해야합니다 : 스토리 보드에서

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
Company100ViewController * vc = (Company100ViewController *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"]; 

당신이 VC-식별자 뷰 컨트롤러의 ID를 설정해야합니다; 당신이 선택한 어떤 식별자.

+0

감사합니다. 그거야. –

+11

참고 : UIPageViewController가 UIViewController 페이지와 동일한 스토리 보드에 있으면 UIStoryboard * sb = [UIStoryboard ...] 대신 self.storyboard를 사용할 수 있습니다. –

3

스위프트 3

let sb = UIStoryboard(name: "MainStoryboard", bundle: nil) 
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier") 
0

스위프트는 UIViewController 객체에서 초기화하기 원하는

경우.

guard let vc = storyboard?.instantiateViewController(withIdentifier: "nameVC") else { 
    return 
} 

// add to current view 
view.addSubview(vc.view) 
관련 문제