2016-07-20 8 views
0

Ich habe meine eigene FreeForm First View-Steuerung erstellt und eine Tabellenansicht darin platziert. Ich habe seine Klasse richtig eingestellt und ein IBOutlet für diese Tabelle erstellt.Ansicht von UIViewController hinzufügen

In meinem zweiten View-Controller mag ich aus dem ersten View-Controller als Schieber in Fenstern die Ansicht angezeigt werden, so dass ich erstellt und IBAction, dass dies tun:

- (IBAction)optionsButtonTapped:(id)sender { 
    OptionsViewController *optionsVC = [[OptionsViewController alloc] init]; 

    // Custom CGRect: 
    CGFloat width = self.view.frame.size.width - 10.0; 
    CGFloat height = [optionsVC.optionsTableView numberOfRowsInSection: 0] * 50.0; 
    CGFloat x = self.view.frame.origin.x + ((self.view.frame.size.width - width)/2); 
    CGFloat y = self.view.frame.origin.y + self.view.frame.size.height + (1.2 * height); 
    CGRect hiddenFrame = CGRectMake(x, y, width, height); 

    // Custom UIView: 
    UIView *view = optionsVC.view; 
    view.frame = hiddenFrame; 
    [self.view addSubview: view]; 
    [self addChildViewController: optionsVC]; 
    [optionsVC didMoveToParentViewController: self]; 
    //NSLog(@"Frame for the view is: %@", NSStringFromCGRect(hiddenFrame)); 

    // Animation: 
    [UIView animateWithDuration: 0.3 animations:^(void){ 
     CGRect visibleFrame = hiddenFrame; 
     visibleFrame.origin.y = self.view.frame.origin.y + self.view.frame.size.height - 5.0 - height; 
     view.frame = visibleFrame; 
    } completion:^(BOOL finished) { 
     NSLog(@"Animation completed"); 
    }]; 
} 

Die Höhe, wenn ich NSLog 0 , weil die Tabellenansicht nicht geladen wird, wenn ich optionsVC einleite (ich habe die dataSource eingerichtet und delegiere). Auch wenn ich die Höhe auf z. 200.0 die Ansicht wird immer noch nicht angezeigt, aber ich habe ein Protokoll vom zweiten View-Controller, dass viewDidLoad ausgeführt wurde.

Was mache ich falsch?

Antwort

2

Sie sollten ContainerView verwenden, um Controller innerhalb des Controllers anzuzeigen. Sie können ihre Position animieren und Delegierung verwenden, um miteinander zu kommunizieren.

Vielleicht sollten Sie andere Design für Ihre App berücksichtigen (bitte fügen Sie hinzu, wie Sie Ihre UI sehen, weil es für mich nicht klar ist), sollten Sie vermeiden, ContainerView zu verwenden. Siehe Implementing a Container View Controller

+0

Ich habe einen einfachen View-Controller und möchte ein Menü hinzufügen, das von der Unterseite des Bildschirms gleiten wird (und dieses Menü basiert auf der Tabellenansicht). – Ancinek

+0

@Ancinek, verwenden Sie ContainerView und Sie sind festgelegt. Es gibt viele Tutorials darüber :) Denken Sie daran, meine Antwort als akzeptiert zu markieren. – Preetygeek

+0

Ich werde direkt hinein springen! Vielen Dank! – Ancinek