2012-11-18 8 views
8

Ich habe versucht, ein View-Layout mit zwei einfachen Containern nebeneinander auf iPad-Dashboard-Art zu implementieren.Containeransicht mit Storyboard-, Interaktions- und Ansichtsproblemen

Ich habe durch zahlreiche Beispiele gelesen und natürlich die Apple View Controller Referenz für View-Controller und im Allgemeinen, aber ich habe ein seltsames Problem, das hoffentlich eine einfache Erklärung haben.

Ich habe die zwei Sichtcontainer nebeneinander hinzugefügt, die jeweils einen Viewcontroller mit einer anderen Hintergrundfarbe, einen Round Rect Button und ein Label enthalten. Und zu Testzwecken habe ich dem "mainViewController" auch eine Round Rect-Schaltfläche hinzugefügt.

Also ziemlich geradlinig und einfach. Jede Ansicht wird in die Containeransicht geladen, aber ich kann mit keiner von ihnen interagieren (wenn auf die Schaltfläche geklickt wird, geschieht NICHTS, keine blaue Hervorhebung, es ist also keine Frage des Delegierens oder irgendeine Aktion von den Schaltflächen wird empfangen oder nicht, weil nichts dergleichen ist implementiert). Allerdings funktioniert das Klicken auf den Button, den ich in den "mainViewController" gesteckt habe, fehlerlos (blau blinkend wie immer). Eine andere seltsame Sache ist, dass die Hintergrundfarbe auch nicht auf den Containeransichten angezeigt wird ?! Nur die Tasten und Beschriftungen.

Programm wie folgt:

Dateien: ViewController.h und .m (ist "Mainviewcontroller") sidebarViewController.h und .m (nichts in diesen Dateien geändert, UIViewController) resultsViewController.h und .m (nichts in diesen Dateien geändert, UIViewController) AppDelegate.h und .m (keine Änderung) Storyboard

ViewController.h, Stellen erstellt und an jeden Behälter Ansicht im Storyboard verbunden.

Storyboard-ID, die im Storyboard auf sidebarViewcontroller und Resultsviewcontroller gesetzt ist.

ViewController.m, alles durch das Buch getan (oder wahrscheinlich nicht, aber was zumindest es wie mir scheint)

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize sidebarView,resultsView; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

UIStoryboard *storyboard = self.storyboard; 
sidebarViewController *sideVC = [storyboard instantiateViewControllerWithIdentifier:@"SidebarViewController"]; 
resultsViewController *resultsVC = [storyboard instantiateViewControllerWithIdentifier:@"ResultsViewController"]; 

//sidebarViewController *sideVC = [[sidebarViewController alloc]init]; 
//rresultsViewController *resultsVC = [[resultsViewController alloc]init]; 
[self addChildViewController:sideVC]; 
sideVC.view.frame = self.sidebarView.frame; 
[self.sidebarView addSubview:sideVC.view]; 
self.sidebarView.userInteractionEnabled = YES; 
[sideVC didMoveToParentViewController:self]; 

[self addChildViewController:resultsVC]; 
resultsVC.view.frame = self.resultsView.frame; 
[self.resultsView addSubview:resultsVC.view]; 
self.resultsView.userInteractionEnabled = YES; 
[resultsVC didMoveToParentViewController:self]; 

} 

(i self.xxxxView auch gehabt haben, und hatte auch die addChildViewController-Anweisung zuerst in der Reihenfolge)

Ok so mein Verdacht ist natürlich, dass es etwas mit der View-Hierarchie zu tun hat, die Ansichten sind "hinter" der Ansicht rootViewController, und daher nur nicht anklickbar angezeigt. Was (wenn etwas) im App-Delegierten erledigt werden muss, damit dies funktioniert? Oder habe ich in diesem Code etwas anderes falsch gemacht?

Edit: Finde einen weiteren Hinweis auf was falsch sein könnte: Als ich "Auto Layout" für das Storyboard deaktivierte, zeigten sich die Ansichten und funktionierten (!) Aber komplett verzerrt, aber jetzt bekomme ich zumindest die richtige Hintergrundfarbe Tasten funktionieren. Kann jemand das reparieren, ohne das automatische Layout zu deaktivieren? da ich denke, dass ich dann mein Layout programmatisch machen muss? :(

Vielen Dank,

Antwort

2

dass Code, den Sie haben alle unnötig und ist wahrscheinlich das, was Ihre Probleme verursacht. Wenn Sie Ihre Behälter Blick in IB hinzugefügt, erstellt es automatisch diese eingebetteten View-Controller für Sie (und Passt die Größe der Containeransicht an.) Haben Sie diese erhalten? Sie müssen lediglich ihre Klassen in die Klassen der untergeordneten Ansichtscontroller ändern.Wenn Sie von Ihrem "Haupt" -Sichtcontroller aus auf diese Controller zugreifen müssen, können Sie über die Eigenschaft childViewControllers einen Verweis darauf erhalten.

+0

Danke für eine schnelle Antwort. Ja, ich bekomme diese, und diese funktionieren natürlich out of the box, Problem ist, ich möchte diese Ansichten programmatisch wechseln (auf andere Controller, die neue Kind-Controller haben). Ich habe noch keine Möglichkeit gefunden, "Seques einzubetten" zu ändern, sodass ich auf Anfrage verschiedene Controller einbetten kann, wenn diese nicht untergeordnete Elemente des Embedded-Controllers sind. –

+0

@AndreasKlintberg, Sind sideBarViewController und resultsViewController die 2 Controller, die Sie automatisch in IB bekommen haben, oder möchten Sie auf diese umsteigen? – rdelmar

+0

Nein, das sind neue, die ich erstellt habe, da ich keine eingebetteten Segmente verwenden wollte (da diese nicht programmatisch behandelt werden können, oder zumindest habe ich noch keinen Verweis darauf gefunden?) –