2013-03-23 12 views
5

3つの異なるテーブル(1つずつ)にあるビューコントローラ(MainViewContollerと呼ぶことができます)を取得したので、ユーザーはセグメントコントロールをタップしてこれらのテーブルを切り替えることができます。ステータスバーをタップすると上にスクロール

MainViewContollerには3つの他のビューコントローラ(A、B、C)があり、それぞれサブビューとしてUITableViewがあり、それ自身のデータを扱います。
MainViewContollerがロードされると、それはコントローラA、BおよびCを開始し、それのビューに彼らのtableViewsを追加します。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ViewControllerA *vcA = [ViewControllerA alloc] init]; 
    [self.view addSubview:vcA.view]; 

    ViewControllerB *vcB = [ViewControllerB alloc] init]; 
    [self.view addSubview:vcB.view]; 

    ViewControllerC *vcC = [ViewControllerC alloc] init]; 
    [self.view addSubview:vcC.view]; 
} 

をしたがって、たとえば、ユーザは、セグメントコントロールをタップして、A、MainViewContoller非表示テーブルBを選択した場合C、およびこのような再表示テーブルAの何かと:

if (userTapOnA) { 
    self.viewControllerA.tableView.hidden = NO; 
    self.viewControllerB.tableView.hidden = YES; 
    self.viewControllerC.tableView.hidden = YES; 
} 

問題:ユーザは、私が欲しいステータスバーをタップし

現在表示されているテーブルが上にスクロールすることを示します。
この動作はかなり基本的なもので、通常のView Controllerを使用しているときは無料で表示されますが、View Controllerが通常のものではないことがわかります。
私はMainViewContollerビューとして他のコントローラのビューを使用すると、私はMainViewContollerがステータスバーのタップを処理しないので、私はデフォルトの動作を壊すと思います。

誰かがそれをどのように解決するか考えましたか?

答えて

26

これはUIScrollViewのヘッダファイルから直接です:ユーザーは、ステータスバーをタップすると、ステータスバーに最も近い タッチ下にスクロールビューのトップにスクロールします*/

が、 scrollsToTopプロパティがYESの場合にのみ、その代理人は を返さず、shouldScrollViewScrollToTopからNOを返します。先頭には が存在しません。 iPhoneでは のスクロール画面にscrollsToTop == YESと表示されている場合にのみ、このジェスチャを実行します。 2つ以上が が見つかった場合、どれもスクロールされません。 */

@property(nonatomic)BOOL scrollsToTop; //デフォルトはYESです。

あなたのケースでは、すべてのscrollsToTopをNOに設定します。ただし、その特定の瞬間に有効にしたいものは除きます。

+0

10x、これは非常に役に立ちました:) – Eyal

2

子コントローラとしてネストされたコントローラを登録する必要があります。

[self addChildViewController:vcA]; 
[self addChildViewController:vcB]; 
[self addChildViewController:vcC]; 

これが問題の解決に役立つかどうかはわかりませんが、それは正しい方法です。

関連する問題