2016-07-20 5 views
0

私は独自のフリーフォームの最初のビューコントローラを作成し、その内部にテーブルビューを配置しました。クラスを適切に設定し、このテーブルのIBOutletを作成しました。UIViewControllerからのビューの追加

これを行います 私はウィンドウ内のスライドのように最初のビューコントローラからビューを表示したいので、私が作成した私の第2のビューコントローラで

とIBAction:

- (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"); 
    }]; 
} 

高さ、私はのNSLogが0で使用これは、私がinit optionsVC(私はdataSourceをセットアップし、デリゲート)時にテーブルビューがロードされていないためです。たとえ高さを例えばに設定しても。 200.0ビューはまだ表示されませんが、viewDidLoadが実行された2番目のビューコントローラーからのログがあります。

私は間違っていますか?

答えて

2

コントローラ内部コントローラを表示するには、ContainerViewを使用する必要があります。その位置をアニメートし、委任を使用して互いに通信することができます。

多分あなたのアプリのための他のデザインを考慮する必要があります(私には明らかではないのでUIをどのように表示するかを加えてください)。ContainerViewを使わないでください。 Implementing a Container View Controller

+0

私はシンプルなビューコントローラーを持っていて、画面の下からスライドするメニューを追加したい(そしてこのメ​​ニューはテーブルビューベースです)。 – Ancinek

+0

@Ancinek、ContainerViewを使用し、あなたが設定されています。それについて多くのチュートリアルがあります:)私の答えは受け入れられたとマークすることを忘れないでください。 – Preetygeek

+0

私はそれにまっすぐジャンプします!ありがとう! – Ancinek

関連する問題