2013-03-04 14 views
22

Ho un'app con uno storyboard. Sto usando diversi View Controller con segues per scegliere da una vista tabella a seconda dell'elemento selezionato. Voglio avere un controller di visualizzazione di pagina in cui le pagine saranno uno o più controller di visualizzazione dallo storyboard, anche ripetendoli. Sto provando a init il controller di visualizzazione della pagina in questo modo: .... self.dataSource = self;Utilizzo di View Controller dallo storyboard in modo programmatico in un controller di visualizzazione pagine

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]; 
} 

Tuttavia il viewcontroller appare in nero. Penso sia perché sto aggiungendo la classe UIviewcontroller ma non la collego a nessuna vista, XIB, nel mio caso con lo storyboard.

Come posso utilizzare il diverso controller di visualizzazione dallo storyboard al livello di programmazione da utilizzare in un controller di visualizzazione di pagina?

risposta

53

Se si visualizza viewController = [[Company100ViewController alloc] init] allora sì, questo non è un controller associato a uno storyboard o a un XIB. Per caricare il controller con un XIB è necessario effettuare le seguenti operazioni:

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

Nel storyboard assicurarsi di impostare l'ID del controller della vista per VC-identificatore; qualunque identificativo tu scelga.

+0

grazie. Che funzioni. –

+11

Nota: se UIPageViewController si trova nello stesso storyboard della tua pagina UIViewControllers, puoi semplicemente usare self.storyboard invece di UIStoryboard * sb = [UIStoryboard ... –

3

Swift 3

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

Swift

Nel caso in cui si desidera init da UIViewController oggetto.

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

// add to current view 
view.addSubview(vc.view) 
Problemi correlati