2016-06-11 20 views
0

別のViewControllerにscrollviewにviewcontroller'sフレームを追加することはできません:https://www.youtube.com/watch?v=3jAlg5BnYUU は、チュートリアルのソースコードはここにある:https://www.veasoftware.com/posts/swipe-navigation-in-swift-xcode-7-ios-9-tutorialが、私はこのチュートリアルのようviewcontrollersの間に私のアプリとスワイプにスワイプ機能を追加したい

このガイドでは、nib/xibファイルを使用して、ViewControllerのコンストラクタで呼び出すために使用する対応するViewControllerとともに作成します。

私はまったく同じことをしており、チュートリアルのようにウォークリングしています。しかし、私はまた、xibファイルを持っていないViewControllerを私のストーリーボード上に使いたいと思っています。そのviewcontrollerは私のコードではViewController2と呼ばれています。それはスワイプ時にスクロールビューに表示されない唯一のものです。他の2つはコンストラクタ呼び出しでxibNameを呼び出すためですが、私のストーリーボード上にあるため、ViewController2にはxibというファイルがありません。

スワイプビューに追加してスワイプ時に表示するにはどうすればよいですか?

@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let vc0 = ViewController0(nibName: "ViewController0", bundle: nil) 

    self.addChildViewController(vc0) 
    self.scrollView.addSubview(vc0.view) 
    vc0.didMoveToParentViewController(self) 

    let vc1 = ViewController1(nibName: "ViewController1", bundle: nil) 

    var frame1 = vc1.view.frame 
    frame1.origin.x = self.view.frame.size.width 
    vc1.view.frame = frame1 

    self.addChildViewController(vc1) 
    self.scrollView.addSubview(vc1.view) 
    vc1.didMoveToParentViewController(self) 

    let vc2 = ViewController2() 

    var frame2 = vc2.view.frame 
    frame2.origin.x = self.view.frame.size.width 
    vc2.view.frame = frame2 

    self.addChildViewController(vc2) 
    self.scrollView.addSubview(vc2.view) 
    vc2.didMoveToParentViewController(self) 

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66); 
} 

答えて

1

次の操作を実行してみてください。

1)プログラムでストーリーボードオブジェクトを取得します。

2)あなたのストーリーボードファイルのView Controller 2にストーリーボードIDを与える。これを行うには、Main.storyboardファイルに移動し、識別子を付けるビューコントローラを選択して、アイデンティティインスペクタを表示します(IDの下にある必要があります)。ストーリーボード方式のView Controller 2のインスタンスinstantiateViewControllerWithIdentifier。このメソッドは、引数としてストーリーボードIDを使用し、スクロールビューの子として追加します。そのよう

@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    //1 
    let mainStoryboard = UIStoryboard.init(name: "Main", bundle: NSBundle.mainBundle()) 

    //3 
    let vc2 = mainStoryboard.instantiateViewControllerWithIdentifier("<InsertStoryBoardID>") as! ViewController2 
    self.addChildViewController(vc2) 
    self.scrollView.addSubview(vc2.view) 
    vc2.didMoveToParentViewController(self) 

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66); 
} 

は、この情報がお役に立てば幸い!お気軽に質問してください!

+0

ありがとうございます!これは、 'ViewController2'のビューのフレームサイズが、他のViewControllerのフレームサイズ(' ViewController0.view.frame'と 'ViewController1.view.frame')の半分であったことを除いて、機能しました。私は 'frame2.size.width = frame1.width'を設定することでそれを解決しました。他のフレームサイズのフレームサイズの50%がデフォルトの理由は何ですか? – Rox

+1

@Roxの場合、MainController2ファイルのMain.storyboardファイルに** Resize View From NIB **のチェックが入っている可能性があります(これがデフォルトだと思います)。確認するにはMain.storyboardファイルに移動し、 'ViewController2'を選択し、属性インスペクタに行き、View Controller - > Layoutセクションの下で** NIB **からResize Viewをクリックします。この質問に示されている通り:http://stackoverflow.com/questions/14520561/wrong-frame-value-while-accessing-the-view-from-storyboard-in-ios – Ike10

+0

ああ!そうだった!ありがとうございました! :-) – Rox

関連する問題