14

3 つのビュー コントローラー間でスワイプできるように UIScrollView をセットアップしようとしています。これは AppDelegate.m の私のコードです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.;

UIScrollView *sv = [[UIScrollView alloc] init];

BarsViewController *bvc = [[BarsViewController alloc] init]; // Create BarsViewController
StopwatchViewController *svc = [[StopwatchViewController alloc] init]; // Create StopwatchViewController
TimerViewController *tvc = [[TimerViewController alloc] init]; // Create TimerViewController

[sv addSubview:bvc.view];
[sv addSubview:svc.view];
[sv addSubview:tvc.view];

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; // Hide status bar

self.window.rootViewController = sv;
[self.window makeKeyAndVisible];
return YES;
}

次の行でエラーが発生します。

self.window.rootViewController = sv;

「UIScrollView *」から「UIViewController *」に割り当てられている互換性のないポインタータイプ」と言っています。

ただ、UIScrollViewControllerというものがないので、どうすればいいのかわかりません。

基本的に、画面全体をスクロール ビューにして、3 つのビュー コントローラー間をスワイプできるようにしたいだけです。どうすればそれを行うことができますか?

4

4 に答える 4

38

UPD: 2015 年 6 月 Swift

コンセプトは同じままで、以下の Objective-C セクションで説明されています。構文に少し変更があります。childviewcontroller を追加するには、次のスニペットを使用します。

let aViewController = storyboard.instantiateViewControllerWithIdentifier("A") as! AViewController;

addChildViewController(aViewController);
scrollView!.addSubview(aViewController.view)
aViewController.didMoveToParentViewController(self)

私のSwift Githubサンプルコードをチェックしてください

Objective-C

スクロール ビューで 3 つのコントローラーを保持する独自のカスタム コンテナー ビュー コントローラー (私はそれを結合ビュー コントローラーと呼びます) を作成します。いつものように UIViewController を継承し、次のように新しい結合されたViewControllerで addChildViewController パブリック API を使用します-viewDidLoad:

[self addChildViewController:aViewController];
[self.scrollView addSubview:aViewController.view];
[aViewController didMoveToParentViewController:self];

コードの動作は次のとおりです。

  • コンテナの addChildViewController: メソッドを呼び出して、子を追加します。
  • 子のビュー プロパティにアクセスしてビューを取得し、独自のビュー階層に追加します。コンテナーは、ビューを追加する前に子のサイズと位置を設定します。コンテナーは常に、子のコンテンツが表示される場所を選択します。
  • 子の didMoveToParentViewController: メソッドを明示的に呼び出して、操作が完了したことを通知します。

各viewControllerでこの操作を行います。その後、combinedViewController を rootViewController として設定します。

さらに説明が必要な場合は、お気軽にお問い合わせください。

参照:カスタム コンテナー ビュー コントローラーの設計

これが私のObjective-C Githubサンプルコードです

UPD:addChildViewController:メソッドが子のwillMoveToParentViewController:メソッドも自動的に呼び出すことを明確にしてくれた @Oliver Atkinson に感謝します。

結果:

ここに画像の説明を入力

于 2013-11-06T19:30:02.333 に答える
1

この git リポジトリを試してください。このリポジトリを使用すると、Snapchat/Tinder メイン ページなどのビュー ナビゲーションを作成できます。

https://github.com/goktugyil/EZSwipeController

于 2016-03-07T13:36:39.470 に答える