web-dev-qa-db-fra.com

Utilisation de View Controller à partir d'un storyboard par programmation dans un contrôleur de vue de page

J'ai une application avec un storyboard. J'utilise plusieurs contrôleurs de vues avec sélections pour choisir une vue de table en fonction de l'élément sélectionné. Je veux avoir un contrôleur de vue de page dans lequel les pages seront un ou plusieurs contrôleur de vue du storyboard, même en les répétant. J'essaie de init le contrôleur de vue de page comme ceci: .... self.dataSource = self;

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

Cependant, la viewcontroller apparaît en noir. Je pense que c’est parce que j’ajoute la classe UIviewcontroller mais ne la connecte à aucune vue, XIB, dans mon cas, avec le scénarimage.

Comment utiliser par programme les différents contrôleurs de vue du storyboard à utiliser dans un contrôleur de vue de page?

22
Laure_f_o

Si vous visualisez le contrôleur = [[Company100ViewController alloc] init], alors oui, ce n'est pas un contrôleur associé à un storyboard ou à un XIB. Pour charger le contrôleur avec un XIB, vous devez procéder comme suit:

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

Dans le storyboard, assurez-vous de définir l'ID du contrôleur de vue sur vc-identifier; quel que soit l'identifiant que vous choisissez.

53
Rudy

Swift 3  

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

Rapide

Si vous souhaitez initier à partir de l’objet UIViewController.

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

// add to current view
view.addSubview(vc.view)
0
dimpiax