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?
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.
Swift 3
let sb = UIStoryboard(name: "MainStoryboard", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier")
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)