Ajouter un enfant-vue-contrôleur swift
J'essaie d'ajouter un enfant-vue-contrôleur à un containerViewController
Enfant :
AViewController
BViewController
CViewController
Je n'ai aucune erreur mais quand je lance l'application, je peux faire glisser l'écran, il y a 3 section balayée, mais de la A,B,C voir les contrôleurs ne pas apparu..
C'est mon code, une idée ?
import UIKit
class ContainerViewController: UIViewController {
@IBOutlet var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
//Do any additional setup after loading the view, typically from a nib.
//creat VC
var Avc : AViewController = AViewController ()
var Bvc : BViewController = BViewController ()
var Cvc : CViewController = CViewController ()
//add it to the view hierarchie
self.addChildViewController(Cvc)
self.scrollView.addSubview(Cvc.view)
Cvc.didMoveToParentViewController(self)
self.addChildViewController(Bvc)
self.scrollView.addSubview(Bvc.view)
Bvc.didMoveToParentViewController(self)
self.addChildViewController(Avc)
self.scrollView.addSubview(Avc.view)
Avc.didMoveToParentViewController(self)
//set the frame
var adminFrame : CGRect = Avc.view.frame
adminFrame.origin.x = adminFrame.width
Bvc.view.frame = adminFrame
var BFrame : CGRect = Bvc.view.frame
BFrame.origin.x = 2*BFrame.width
Cvc.view.frame = BFrame
//set the frame of the scrollview
var scrollWidth: CGFloat = 3*self.view.frame.width
var scrollHeight: CGFloat = self.view.frame.size.height
self.scrollView.contentSize = CGSizeMake(scrollWidth, scrollHeight)
}
Edit:
À la recherche à la vue de la hiérarchie, il rapporte ce qui suit:
<UIWindow: 0x7ff3fad19f70; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7ff3fac3efe0>; layer = <UIWindowLayer: 0x7ff3fad19740>>
| <UIView: 0x7ff3fb108b90; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ff3fb108e60>>
| | <UIScrollView: 0x7ff3fac3acf0; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ff3fb107320>; layer = <CALayer: 0x7ff3fac18e00>; contentOffset: {0, 0}; contentSize: {960, 568}>
| | | <UIView: 0x7ff3fac41ed0; frame = (640 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ff3fac28a00>>
| | | <UIView: 0x7ff3fac42320; frame = (320 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ff3fac38e10>>
| | | <UIView: 0x7ff3fac42730; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ff3fac42810>>
| | | <UIImageView: 0x7ff3faf020f0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7ff3fae0df80>>
| | | <UIImageView: 0x7ff3fac1c660; frame = (316.5 0; 3.5 568); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7ff3fac39420>>
| | <_UILayoutGuide: 0x7ff3fb108ec0; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x7ff3fb1091e0>>
| | <_UILayoutGuide: 0x7ff3fb109c20; frame = (0 568; 0 0); hidden = YES; layer = <CALayer: 0x7ff3fb109d00>>
- Vous pourriez vouloir mettre en pause l'application et à la
(lldb)
invite de commandes, entrezpo [[UIWindow keyWindow] recursiveDescription]
, qui va vous montrer les images de tous les points de vue. Il me semble que vous n'avez jamais misAvc.view.frame
, de sorte que je parie que sonCGRectZero
. Je vous suggère deAvc.view.frame = self.view.bounds
avant de démarrer le cadre deBvc
etCvc
. - Je pense que la seule image de la sorcière est dysplayed est la scrollView cadre de mon conteneur, j'ai essayé votre solution mais ça ne fonctionne pas.
- L' (lldb) po [[UIWindow keyWindow] recursiveDescription] <UIWindow: 0x7ffbd9454b20; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7ffbd94553d0>; couche = <UIWindowLayer: 0x7ffbd9451c00>> | <UIView: 0x7ffbd9718e60; frame = (0 0; 320 568); autoresize = W+H; couche = <CALayer: 0x7ffbd9719130>> | | <UIScrollView: 0x7ffbd970fdd0; frame = (0 0; 320 568);
- Génial! Si votre sous-vues sont là! Mais vous n'avez pas apparemment ajouté quelque chose à ceux des sous-vues, donc il n'y a rien à voir.
- J'ai juste changé la couleur de l'arrière-plan pour chacun d'entre eux afin d'identifier les différents sous-vues, mais je ne peux pas voir la couleur différente quand swipping, tout est blanc. J'ai aussi ajouter une étiquette...
- En fait je m en essayant de faire de cette github.com/lbrendanl/SwiftSwipeView ce tuto medium.com/swift-programming/...
- Avez-vous d'ajouter l'étiquette et de changer la couleur par programme ou dans interface builder. Dans ce dernier cas, vous devez instancier les trois enfants de vues à partir de la table de montage séquentiel, comme indiqué dans ma réponse révisée. Si vous êtes à le faire par programmation, de mise à jour de votre question avec le code que vous avez utilisé. Et, comme toujours, de répéter que
recursiveDescription
, de sorte que vous pouvez distinguer entre l'étiquette n'étant pas là vs avoir uneframe
qui le rend impossible à voir (chercher le zéro de la largeur ou de la hauteur).
Vous devez vous connecter pour publier un commentaire.
Lorsque j'utilise votre code, exécutez l'application, et la pause de l'application, et de regarder le point de vue de la hiérarchie, je vois les suivantes:
Si vous ne voyez pas vos sous-vues là-bas, puis probablement coupables comprennent:
Vous ne pouvez pas avoir spécifié le point de vue de contrôleur de classe de base dans votre scène, et donc de ce code n'est pas en cours d'exécution. Vous pouvez le vérifier avec un
println
instruction de journal ou point d'arrêt à côté de ce qu'viewDidLoad
et assurez-vous de frapper cette routine.Vous ne pouvez pas avoir accroché le
@IBOutlet
pour lascrollView
, et doncscrollView
estnil
. Confirmer cela en mettant un point d'arrêt dansviewDidLoad
et l'examen de lascrollView
propriété.Dans votre nouvelle question, nous pouvons maintenant voir que les trois sous-vues sont présents et semblent être à la bonne taille. C'est très bien.
Maintenant, la question est pourquoi vous ne voyez pas de quoi que ce soit. Si vous avez ces définies comme des scènes dans votre scénario, vous devez:
Assurez-vous que la "classe de base" et le "storyboard identifiant" est défini pour chacun de ces trois enfant scènes; et
Lorsque votre vue principale du contrôleur de instancie les trois enfants de vue des contrôleurs, vous instancier à partir de la table de montage séquentiel à l'aide de la table de montage séquentiel identifiant (dans mon exemple, j'ai utilisé storyboard identificateurs de
A
,B
, etC
, respectivement):Si vous ne le ci-dessus et répétez l'
recursiveDescription
vous devriez voir votre scène du sous-vues (par exemple, les étiquettes que vous avez ajouté) apparaissent dans la sortie.viewDidLoad
, et a examinéscrollView
quand vous frappez le point d'arrêt, il a été non-nil
?let Avc = AViewController(nibName: "nibname", bundle: nil)
).Utiliser à la suite de l'Extension pour l'ajout de ChildviewController
créer des Extensions de fichier.copie rapide soufflet code
Vue de l'utilisateur contrôleur
holderView!
. gist.github.com/neoneye/fd01d21944b40fc7794af6c8f0591725