Add-child-view-controller swift
Ich m versuchen, hinzufügen von untergeordneten Ansicht-controller zu einem containerViewController
Kind :
AViewController
BViewController
CViewController
Habe ich keine Fehler aber wenn ich die app starten, ich kann wischen Sie über den Bildschirm, es ist 3 Abschnitt geklaut, aber die A -, B -, C-view-Controller nicht erschienen..
Dies ist mein code, keine Ahnung ?
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:
Blick auf die view-Hierarchie, so berichtet es die folgenden:
<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>>
Möchten Sie vielleicht zum anhalten der app und auf der
Ich denke, die nur den Rahmen Hexe ist dysplayed ist der scrollView Rahmen meiner container, ich habe versucht, Ihre Lösung, aber es funktioniert nicht.
Die (lldb) po [[UIWindow keyWindow] recursiveDescription] <UIWindow: 0x7ffbd9454b20; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7ffbd94553d0>; layer = <UIWindowLayer: 0x7ffbd9451c00>> | <UIView: 0x7ffbd9718e60; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ffbd9719130>> | | <UIScrollView: 0x7ffbd970fdd0; frame = (0 0; 320 568);
Genial! Damit Ihre Untersichten da! Aber Sie haben nicht offenbar noch etwas zu denen, Untersichten, so gibt es nichts zu sehen.
Ich habe gerade die Farbe, die den hintergrund für jeden von Ihnen zu identifizieren die verschiedenen Untersichten, aber ich kann nicht sehen, die andere Farbe, wenn swipping, alles ist weiß. Ich habe auch ein label hinzufügen...
(lldb)
Eingabeaufforderung, geben Sie po [[UIWindow keyWindow] recursiveDescription]
zeigen Sie die Bilder für alle Ansichten. Es scheint mir, dass Sie nie Avc.view.frame
, also ich Wette, seine CGRectZero
. Ich würde vorschlagen Avc.view.frame = self.view.bounds
bevor Sie beginnen festlegen des Rahmens der Bvc
und Cvc
.Ich denke, die nur den Rahmen Hexe ist dysplayed ist der scrollView Rahmen meiner container, ich habe versucht, Ihre Lösung, aber es funktioniert nicht.
Die (lldb) po [[UIWindow keyWindow] recursiveDescription] <UIWindow: 0x7ffbd9454b20; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7ffbd94553d0>; layer = <UIWindowLayer: 0x7ffbd9451c00>> | <UIView: 0x7ffbd9718e60; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ffbd9719130>> | | <UIScrollView: 0x7ffbd970fdd0; frame = (0 0; 320 568);
Genial! Damit Ihre Untersichten da! Aber Sie haben nicht offenbar noch etwas zu denen, Untersichten, so gibt es nichts zu sehen.
Ich habe gerade die Farbe, die den hintergrund für jeden von Ihnen zu identifizieren die verschiedenen Untersichten, aber ich kann nicht sehen, die andere Farbe, wenn swipping, alles ist weiß. Ich habe auch ein label hinzufügen...
InformationsquelleAutor jmcastel | 2014-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich Ihren code, führen Sie die app, und halten Sie die app, und suchen Sie in der view-Hierarchie, sehe ich Folgendes:
Wenn Sie nicht sehen, Ihre Untersichten gibt, dann wahrscheinlich Schuldigen gehören:
Können Sie nicht angegeben haben, die view-controller-Basisklasse, die in Ihrer Szene, und somit ist dieser code nicht ausgeführt wird. Sie können dies überprüfen, mit einem
println
log-Anweisung oder Haltepunkt in dieser SeiteviewDidLoad
und stellen Sie sicher, Sie schlagen diese routine.Möglicherweise haben Sie nicht süchtig die
@IBOutlet
für diescrollView
, und damitscrollView
istnil
. Bestätigen Sie diese, indem Sie eine Haltepunkt inviewDidLoad
und Prüfung derscrollView
Eigenschaft.In der überarbeiteten Frage, können wir nun sehen, dass die drei Untersichten sind vorhanden und scheinen die richtige Größe. Das ist toll.
Nun ist die Frage, warum Sie nichts sehen. Wenn Sie diese definiert als Szenen in das storyboard, man soll:
Stellen Sie sicher, dass die "Basis-Klasse" und die "storyboard-identifier" definiert sich für jeden dieser drei, child ' - Szenen; und
Wenn Ihr Haupt-view-controller instanziiert drei child-view-Controller, würden Sie instanziieren Sie aus dem storyboard mit einem storyboard-id (in meinem Beispiel habe ich verwendet, storyboard-Bezeichner
A
,B
, undC
jeweils):Wenn Sie die obigen Punkte und wiederholen Sie den
recursiveDescription
sollten Sie Ihre Szene Untersichten (z.B. die Etiketten, die du Hinzugefügt) in der Ausgabe angezeigt werden.So, wenn Sie Ihren Haltepunkt in
viewDidLoad
, und untersuchtscrollView
wenn Sie den Haltepunkt, war es nichtnil
?ich hab ein Fehler in diesem breakpoint mit po [[UIWindo keyWindow] recursiveDescription] :error: <EXPR>:1:12: error: expected ',' separator [[UIWindow keyWindow] recursiveDescription] ^ , <EXPR>:1:23: Fehler: expected ',' separator [[UIWindow keyWindow] recursiveDescription]
sorry im noob...ich habe dieses <UIScrollView: 0x7fd47ac17540; frame = (0 0; 320 568); clipsToBounds = JA; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fd47ac1ea90>; layer = <CALayer: 0x7fd47ac16ac0>; contentOffset: {0, 0}; contentSize: {0, 0}>
Ok ich habe versucht zu instanziieren, von der storyboard-aber der ap Absturz, weil "nicht enthalten-view-controller mit der Kennung 'A'". Es s normal, da kann ich nicht die "A" - Kennung in das storyboard. In meinem storyboard habe ich nur eine view-controler (ContainerViewControler Klasse). A, B, CViewController sind xib-Datei, so dass Sie nicht sichtbar sind ine das storyboard. Vielen Dank für Eure Geduld und sorry für mein schlechtes Englisch..
InformationsquelleAutor Rob
Verwenden Sie folgende Erweiterung für das hinzufügen ChildviewController
erstellen Sie die Datei-Erweiterungen.swift-Kopie Balg-code
User-view-controller
bitte prüfen Sie oben, aktualisierten code für besser zu verstehen
Ich überarbeitet habe deinen code etwas, es gibt also keine explizite Auspacken
holderView!
. gist.github.com/neoneye/fd01d21944b40fc7794af6c8f0591725InformationsquelleAutor Phani Sai