Ajout de UIScrollView à un UIViewController

J'ai un UIViewController , et je veux append un UIScrollView (activer le support de défilement), est-ce possible?

Je sais que c'est possible, si vous avez un UIScrollView pour y append un UIViewController , mais je m'intéresse aussi si reverse est vrai, si je peux append un UIScrollView à un UIViewController existant, de manière à get une fonction de défilement.

modifier

Je pense avoir trouvé une réponse: Ajouter un UIViewController à UIScrollView

Un UIViewController a une propriété view . Ainsi, vous pouvez append un UIScrollView à sa view . En d'autres termes, vous pouvez append la vue de défilement à la hiérarchie de vue.

Ceci est possible grâce au code ou via XIB. En outre, vous pouvez save le controller de vue en tant que délégué pour votre vue de défilement. De cette manière, vous pouvez implémenter des methods pour exécuter différentes fonctionnalités. Voir UIScrollViewDelegate protocole UIScrollViewDelegate .

 // create the scroll view, for example in viewDidLoad method // and add it as a subview for the controller view [self.view addSubview:yourScrollView]; 

Vous pouvez également replace la méthode loadView pour la class UIViewController et définir la vue de défilement comme vue principale pour le controller que vous envisagez.

modifier

J'ai créé un petit échantillon pour vous. Ici, vous avez une vue UIViewController tant qu'enfant de la vue d'un UIViewController . La vue déroulante a deux vues en tant qu'enfants: view1 (couleur bleue) et view2 (couleur verte).

Ici, je suppose que vous pouvez faire défiler dans une seule direction: horizontalement ou verticalement. Dans ce qui suit, si vous faites défiler horizontalement, vous pouvez voir que la vue déroulante fonctionne comme prévu.

 - (void)viewDidLoad { [super viewDidLoad]; UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)]; scrollView.backgroundColor = [UIColor redColor]; scrollView.scrollEnabled = YES; scrollView.pagingEnabled = YES; scrollView.showsVerticalScrollIndicator = YES; scrollView.showsHorizontalScrollIndicator = YES; scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height); [self.view addSubview:scrollView]; float width = 50; float height = 50; float xPos = 10; float yPos = 10; UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(xPos, yPos, width, height)]; view1.backgroundColor = [UIColor blueColor]; [scrollView addSubview:view1]; UIView* view2 = [[UIView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width + xPos, yPos, width, height)]; view2.backgroundColor = [UIColor greenColor]; [scrollView addSubview:view2]; } 

Si vous devez faire défiler uniquement verticalement, vous pouvez changer comme suit:

 scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height * 2); 

Évidemment, vous devez réorganiser la position de view1 et view2 .

PS Ici, j'utilise ARC. Si vous n'utilisez pas ARC, vous devez explicitement release des objects alloc-init.