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つのビューコントローラー間をスワイプできるようにします。どうすればそれを行うことができますか?
UPD:2015年6月スイフト
概念は同じままです。これについては、以下のObjective-Cセクションで説明します。構文に少し変更があります。 childviewcontrollerを追加するには、次のスニペットを使用します。
let aViewController = storyboard.instantiateViewControllerWithIdentifier("A") as! AViewController;
addChildViewController(aViewController);
scrollView!.addSubview(aViewController.view)
aViewController.didMoveToParentViewController(self)
私をチェックしてください Swift Githubサンプルコード
Objective-C
独自のカスタムコンテナビューコントローラ(これをcombinedViewControllerと呼びます)を作成します。これにより、3つのコントローラがスクロールビューで保持されます。いつものようにUIViewControllerを継承し、次のように新しいcombinedViewController -viewDidLoad:
でaddChildViewControllerパブリックAPIを使用します。
[self addChildViewController:aViewController];
[self.scrollView addSubview:aViewController.view];
[aViewController didMoveToParentViewController:self];
コードの機能は次のとおりです。
この操作は、各viewControllerで実行します。その後、combinedViewControllerをrootViewControllerとして設定します。
さらに説明が必要な場合は、お気軽にお問い合わせください。
これが私の Objective-C Githubサンプルコード
UPD:addChildViewController:
メソッドが子のwillMoveToParentViewController:
メソッドも自動的に呼び出すことを明確にしてくれた@OliverAtkinsonに感謝します。
結果:
let obj1 = self.storyboard?.instantiateViewControllerWithIdentifier("DocumentsVC") as! DocumentsVC
let obj2 = self.storyboard?.instantiateViewControllerWithIdentifier("AppointmentsVC") as! AppointmentsVC
let obj3 = self.storyboard?.instantiateViewControllerWithIdentifier("DashboardVC") as! DashboardVC
self.containerScrollView.frame = obj2.view.frame
self.containerScrollView.addSubview(obj2.view)
obj2.willMoveToParentViewController(self)
self.addChildViewController(obj2)
self.containerScrollView.addSubview(obj1.view)
obj1.willMoveToParentViewController(self)
self.addChildViewController(obj1)
self.containerScrollView.addSubview(obj3.view)
obj3.willMoveToParentViewController(self)
self.addChildViewController(obj3)
self.containerScrollView.contentSize = CGSizeMake(3*UIScreen.mainScreen().bounds.width, 0)
obj1.view.frame.Origin = CGPointMake(0, 0)
obj2.view.frame.Origin = CGPointMake(UIScreen.mainScreen().bounds.width, 0)
obj3.view.frame.Origin = CGPointMake(2*UIScreen.mainScreen().bounds.width, 0)
Swift 3.
Sachinの回答に基づいて-もう少し一般的-ビュー配列に次の要素を追加するだけです
var views = [ViewController(), ViewController2(), ViewController3(), ViewController4()]
func setupScrollView() {
scrollView.frame = views.first!.view.frame
scrollView.contentSize = CGSize(width: CGFloat(views.count) * width, height: 0)
_ = views.map({ addViewToScrollView($0) })
_ = views.map({ $0.view.frame.Origin = CGPoint(x: CGFloat(views.index(of: $0)!) * width, y: 0) })
}
func addViewToScrollView(_ viewController: UIViewController) {
scrollView.addSubview(viewController.view)
views.willMove(toParentViewController: self)
addChildViewController(viewController)
}
このgitリポジトリを試してください。このリポジトリを使用すると、Snapchat/Tinderメインページのようなビューナビゲーションを作成できます。