0

再利用可能な ViewController クラスをいくつか開発しようとしています。

私は通常、古いviewController(iOS5より前)のViewControllerに2つのtableViewを持っています。

私は書き直しを計画しており、新しい iOS 5 封じ込め API を使用することを考えていました。次の例を検討してください。

理想的には、2 つのビューコントローラーを使用し、各ビューコントローラーに 2 つの tableView を持たせます。いつでもどちらのViewControllerも基本的に2つのtableViewを表示します。

それぞれがtableViewを持つ4つのViewControllerを使用し、それらをParentContainerViewに追加する必要があるかどうか疑問に思っていました。以前の順番に並べてください。

問題は、2 つの ViewController を同時に分割して表示できるようにするために、スライド ジェスチャが IN PROGRESS のときの A viewController の動作を変更することです。

スライド ジェスチャを反映するには:

スワイプジェスチャーを子View Controllerに反映し、ViewControllerのスライド動作に影響を与える方法を本当に理解できないようです。どんな例でも素晴らしいでしょう。たとえば、インデックス 0 の ViewController は、右スワイプ ジェスチャが進行中のときに左に消える前に幅が狭くなり、インデックス 2 の新しい ViewController が表示されます。その間ずっと、中央の ViewController (インデックス 1) は幅ではなく y 位置を変更します。

どんな提案も素晴らしいでしょう、

4

1 に答える 1

0

これがあなたの望むものかどうかはわかりませんが、スクロール ビューのコンテンツ ビューに 4 つのコンテナー ビューを持つスクロール ビューを使用して、このようなものを実装しました。これらの各コンテナー ビューには、ビュー コントローラーへのセグエが埋め込まれています (この場合は tableViewController になります)。

これが私がやった方法です:

  1. ビューコントローラーにスクロールビューを追加しました
  2. UIView をスクロール ビューにドラッグし、そのフレームを {{0,0},{640,548}} に設定しました
  3. 手順 2 のビューの下に 4 つのコンテナー ビューを追加しました (下とは、画面左側のオブジェクト リストのビューの下を意味します。キャンバス)。フレームを {{0,0},{160,548}} {{160,0},{160,548}} {{320,0},{160,548}} および {{480,0},{160,548}} に設定しました. これにより、それぞれが画面の半分の幅の 4 つのビュー コントローラーが得られます。
  4. スクロールビューの下に別のフルサイズのビューを追加し (リストの下、ただしビュー階層の一番上を意味します)、背景色を明確にしました。このビューは一番上にあり、すべてのタッチを遮断します。
  5. 手順 4 のビューに 2 つのスワイプ ジェスチャ レコグナイザー (左右に 1 つ) を追加しました。

ビュー コントローラーで、スクロール ビュー (スクローラー) と大きな (640 x 548 の) ビュー (コンテンツ) に IBOutlets を作成し、次のコードを .m ファイルに追加しました。

@implementation ViewController

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.scroller.contentSize = self.content.frame.size;
}

-(IBAction)moveLeft:(id) sender {
    if (self.scroller.contentOffset.x < 320)
        [self.scroller setContentOffset:CGPointMake(self.scroller.contentOffset.x + 160, 0) animated:YES];
}

-(IBAction)moveRight:(id) sender {
    if (self.scroller.contentOffset.x > 0)
        [self.scroller setContentOffset:CGPointMake(self.scroller.contentOffset.x - 160, 0) animated:YES];
}

@end

2 つのジェスチャー レコグナイザーは、IB で moveLeft: および moveRight: メソッドに接続されました。したがって、これにより、コントローラ 1 と 2、2 と 3、または 3 と 4 を同時に画面に表示することができます。

于 2012-11-24T06:11:16.473 に答える