2016-10-31 8 views
0

私はthisのフレームワークを使って、Tinder(Swift 3)のようなナビゲーションバーを提供しようとしています。Tinderのようなナビゲーション(スウィフト)

私の目標は、これを組み込み、ストーリーボード上に3つの独立したビューコントローラを持ち、それらのVC.swiftファイルとセグを使用することです。

Hereは、ストーリーボードのTinderスタイルと3つのViewControllerを使用した作業テストプロジェクトです。

私のプロジェクトで使用する前にテストしたいので、このプロジェクトを更新しました。

私が見たように、navは3つのVCを持ち、それらの間を切り替えるUINavigationControllerです。私はストーリーボードで彼を見たかった。私はMainNavigationControllerと呼ばれるUIビルダーとUINavigationControllerクラスのUINavigationControllerを作成

var nav: UINavigationController? 

はそうでinsted。

var nav: MainNavigationController? 
nav = mainStb.instantiateViewController(withIdentifier: "mainNavigationController") as? MainNavigationController 

私はまたMainNavigationControllerに私は(ボタンを使用)セグエこのVCから、絵コンテするための簡単な初期ビューコントローラを追加しました:

@IBAction func buttonSegue(_ sender: Any) { 
     setNav() 

     self.performSegue(withIdentifier: "segue", sender: nil) 
    } 

func setNav() { 


    //// implement my logic (if logged in go to... if not go to...) 

    instantiateControllers() 
    setItems() 

    let items = [UIImageView(image: chat), 
       UIImageView(image: gear), 
       UIImageView(image: profile)] 

    let controllers = [oneVC!, 
         twoVC!, 
         threeVC!] as [UIViewController] 

    controller = SLPagingViewSwift(items: items, controllers: controllers, showPageControl: false) 

    setupController() 


    nav = MainNavigationController(rootViewController: controller) 
    appDelegate.window?.rootViewController = nav 
    appDelegate.window?.makeKeyAndVisible() 
} 

をすべてがこれまでに動作します。 BUT

私が現在持っている唯一の問題は、私はセグのコントロールがないということです。 3つのビューコントローラに追加しました

このメソッドは決して打つことはありません。私はビューコントローラ間でデータを渡す必要があります。どのようにそれを行うことができますか?

また、(ボタンのような)要素をタップして、あるビューコントローラから別のビューコントローラにセグを実装する方法はありますか? 1つのVCから別のVCへのボタンを使用して通常のセグを設定すると、ナビゲーションバーなしでターゲットVCが表示されます。

私は現在の実装hereをアップロードしました。

任意のヘルプはappricieatedされます。ありがとう。

+0

* Swap 3のSLPagingViewのコードとVCのサンプルプロジェクトの@DavidSeekに感謝します。 –

+0

あなたのボタンメソッドの 'performSegueWithIdentifier'は' setNav'のルートビューコントローラを既に置き換えていて、あなたのビューは現在ストーリーボード環境の外にあるので何もしません – Paulw11

答えて

1

大丈夫です。

まず最初に、空白の画面だけのストーリーボードがあれば、他のコーダーのために色付けして、何が起こっているのかを速やかに伝えることができます。

enter image description here

黄色VCからUINavigationControllerへのあなたのセグエがトリガーしていますが、プログラム的にUINavigationControllerをインスタンス化するために使用されていません。

// Sets the root 
func setNav() { 
    // here   
    nav = MainNavigationController(rootViewController: controller) 
    appDelegate.window?.rootViewController = nav 
    appDelegate.window?.makeKeyAndVisible() 
} 

緑色のVCから青色のVCへのあなたのセグは、セグエがないので意味をなさない。これらのコントローラーは同じコントローラーに組み込まれています。 perform(forSegue機能を設定していますが、決して呼び出すことはありません。あなたはセグがある場合にのみperform(forSegueを使用します。しかし、そうではありません。

setNav()機能せずにボタンを設定:単一VCとしての青色VC

@IBAction func buttonSegue(_ sender: Any) { 
    //setNav() 
    self.performSegue(withIdentifier: "segue", sender: nil) 
} 

結果。セグエ無し

enter image description here

同じ機能、セグエと同様に、同じ論理になります。などと言ったので、あなたがプログラム的にとにかくすべてを設定する:あなたがグローバルVCsをインスタンス化しておりますので

@IBAction func buttonSegue(_ sender: Any) { 
    setNav() 
    //self.performSegue(withIdentifier: "segue", sender: nil) 
} 

enter image description here

は、あなたが取得することができます/グローバルVCs値を...設定

class OneVC: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func passData(_ sender: Any) { 
     let oneVCString = "This String is passed from OneVC" 
     twoVC?.theLabel.text = oneVCString 
    } 
} 

と結果:

enter image description here

Here is this on Githubあなたのプロジェクトのフォークとして。また、あなたのコードをAppDelegateから削除しました。とにかく役に立たずに呼ばれた。すでにInterface Builderで同じことをしていました。

最後になりましたが、少なくとも私からのコメント:コードを整理してください!他のユーザーは、その上に異なる意見があるかもしれませんが、これは私が他のプログラマーと仕事をしたいかではありません。

import UIKit 

class TwoVC: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     print("from two to...") 
     print(segue.identifier!) 
    } 
    /* 
    // MARK: - Navigation 

    // In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 
    } 
    */ 

} 

は、すべての不要なコメントを削除します。

+0

ありがとう@DavidSeek、 。私はちょうどsegueのような行を追加しました: "controller.setCurrentIndex(1、animated:false)" func passDataの最後に。それはまさに私が自分自身に実証し、理解する必要があったものです。私は大衆とコーディングの貧弱な基準には申し訳なく思っています。私はまだ私の自己を非常に新しいものと考えています。私はあなたの一般的なコメントとヒントを受け取ってうれしいです。どうもありがとう。 –

+0

それはあなたを怒らせたり元気に戻したりするつもりはありませんでした。私はちょうど(私の理解で)役に立つヒントをあなたに与えていた。質問に答えがあるので、お手数をお掛けして助けてください、upvoteを忘れないでください。 –

+0

彼らは助けになりました、私が言ったように、@DavidSeekあなたのヒントはいつでも歓迎です。別の(重要な)質問を作成しました。あなたが一見すると大好きです。ありがとう:http://stackoverflow.com/questions/40428075/segue-from-a-slpagingviewswift-vc-and-dismiss-the-destination-vc-to-return –

関連する問題