J'essaie de configurer UIScrollView pour pouvoir glisser entre mes 3 contrôleurs de vue. Ceci est mon code dans AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.;
UIScrollView *sv = [[UIScrollView alloc] init];
BarsViewController *bvc = [[BarsViewController alloc] init]; // Create BarsViewController
StopwatchViewController *svc = [[StopwatchViewController alloc] init]; // Create StopwatchViewController
TimerViewController *tvc = [[TimerViewController alloc] init]; // Create TimerViewController
[sv addSubview:bvc.view];
[sv addSubview:svc.view];
[sv addSubview:tvc.view];
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; // Hide status bar
self.window.rootViewController = sv;
[self.window makeKeyAndVisible];
return YES;
}
Cela donne une erreur sur cette ligne:
self.window.rootViewController = sv;
disant, "Types de pointeurs incompatibles affectant" UIViewController * "à partir de UIScrollView *" ".
Cependant, il n’existe pas de UIScrollViewController, je ne sais donc pas quoi faire.
En gros, je veux juste que tout l’écran soit en défilement, ce qui me permet de glisser entre mes 3 contrôleurs de vue. Comment pourrais-je m'y prendre?
UPD: juin 2015 Swift
Le concept reste le même, décrit ci-dessous dans la section Objectif-C. Il y a un petit changement dans la syntaxe. Pour ajouter childviewcontroller, utilisez l'extrait suivant:
let aViewController = storyboard.instantiateViewControllerWithIdentifier("A") as! AViewController;
addChildViewController(aViewController);
scrollView!.addSubview(aViewController.view)
aViewController.didMoveToParentViewController(self)
Vérifiez mon Swift Github Sample Code
Objective-C
Créez votre propre contrôleur de vue de conteneur personnalisé (je l'appellerai combineViewController), qui tiendra vos trois contrôleurs en vue de défilement. Héritez comme vous le faites toujours avec UIViewController, puis utilisez l'API publique addChildViewController dans votre nouveau combineViewController -viewDidLoad:
comme ceci:
[self addChildViewController:aViewController];
[self.scrollView addSubview:aViewController.view];
[aViewController didMoveToParentViewController:self];
Voici ce que fait le code:
Effectuez cette opération avec chacun de vos viewControllers. Ensuite, définissez votre combineViewController en tant que rootViewController.
si vous avez besoin d'explications supplémentaires, n'hésitez pas à demander.
Référence: Concevoir un contrôleur de vue de conteneur personnalisé
Voici votre Exemple de code Github Objective-C
UPD: Merci @Oliver Atkinson pour avoir clarifié le fait que la méthode addChildViewController:
appelle également la méthode willMoveToParentViewController:
de l’enfant automatiquement.
Résultats:
let obj1 = self.storyboard?.instantiateViewControllerWithIdentifier("DocumentsVC") as! DocumentsVC
let obj2 = self.storyboard?.instantiateViewControllerWithIdentifier("AppointmentsVC") as! AppointmentsVC
let obj3 = self.storyboard?.instantiateViewControllerWithIdentifier("DashboardVC") as! DashboardVC
self.containerScrollView.frame = obj2.view.frame
self.containerScrollView.addSubview(obj2.view)
obj2.willMoveToParentViewController(self)
self.addChildViewController(obj2)
self.containerScrollView.addSubview(obj1.view)
obj1.willMoveToParentViewController(self)
self.addChildViewController(obj1)
self.containerScrollView.addSubview(obj3.view)
obj3.willMoveToParentViewController(self)
self.addChildViewController(obj3)
self.containerScrollView.contentSize = CGSizeMake(3*UIScreen.mainScreen().bounds.width, 0)
obj1.view.frame.Origin = CGPointMake(0, 0)
obj2.view.frame.Origin = CGPointMake(UIScreen.mainScreen().bounds.width, 0)
obj3.view.frame.Origin = CGPointMake(2*UIScreen.mainScreen().bounds.width, 0)
Swift 3.0
Basé sur la réponse de Sachin - un peu plus générique - ajoutez simplement l'élément suivant au tableau de vues
var views = [ViewController(), ViewController2(), ViewController3(), ViewController4()]
func setupScrollView() {
scrollView.frame = views.first!.view.frame
scrollView.contentSize = CGSize(width: CGFloat(views.count) * width, height: 0)
_ = views.map({ addViewToScrollView($0) })
_ = views.map({ $0.view.frame.Origin = CGPoint(x: CGFloat(views.index(of: $0)!) * width, y: 0) })
}
func addViewToScrollView(_ viewController: UIViewController) {
scrollView.addSubview(viewController.view)
views.willMove(toParentViewController: self)
addChildViewController(viewController)
}
Essayez ce dépôt Git. En utilisant ce dépôt, vous pouvez créer une navigation dans les vues telle que Pages principales de Snapchat/Tinder.