2017-01-31 17 views
-2

メイン、ライダー、ドライバーの3つのストーリーボードを持つ1つのデバイスのアプリ。
ドライバーストーリーボードでは、ドライバーがライドを受け入れると、DriverVC.swiftが「acceptedRyde = true」をライダーストーリーボードに渡す必要があります.RiderVCを使用すると、ライダーストーリーボードにアラートが表示されます。スウィフトを使用したスト​​ーリーボード間のデータの受け渡し

どうすればいいですか?

+0

ローカル通知を使用する必要があります。 – Poles

+0

単に意見を述べるのではなく、理由を説明してください。 – Russell

答えて

1

@LizG - これはFirebaseのようなもので実装するのはかなり簡単です。

多くのFirebaseアプリケーションでは、現在のユーザーIDを初期キーとして格納されているデータが表示されますが、ここで行うと他の誰もデータにアクセスできなくなります。あなたはこのような乗り物のリストを持っている可能性が

最も簡単な実装... enter image description here

、その後、あなたはこの

のようなものとの変化を見てそれらを持って、ドライバーには何もプッシュする必要はありません。
let ref = FIRDatabase.database().reference(withPath: "Rides") 
    ref.queryOrdered(byChild: "status").queryEqual(toValue: "requested").observe(FIRDataEventType.value, with: { (snapshot) in 
     let rides = snapshot.value as? [String : AnyObject] ?? [:] 
     for ride in rides 
     { 
      print(ride) 
      // update the list of available rides 
     } 
    }) 

乗車を受け入れるときには、2人のドライバーが同時にそれをやろうとしないように注意する必要があります。あなたが管理しているかどうかを確認してください

Firebaseの例は豊富で、必要なものをすべて表示してください。

0
let rider = UIStoryboard(name: "Driver", bundle: nil).instantiateViewController(withIdentifier: "RirderVC") as! RiderVC 
rider.acceptedRyde = true 

self.present(rider, animated: true, completion: nil) 

RiderVCをRiderVCのストーリーボード識別子として設定する必要があります。

私はあなたのRiderVCにacceptRyde変数があるとします。

var acceptRyde: Bool? 

あなただけのあなたがprepare(for:sender:)を使用することができ、あなたのviewDidLoadで

let alertController = UIAlertController(title: "Ride Accepted", message: "your message", preferredStyle: .alert) 
alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) 

self.present(alertController, animated: true, completion: nil) 
+0

このコードはどこに行きますか?ドライバーで? viewDidLoadでは?私はこれをやってみたが、私のアプリはドライバからライダーにジャンプすることができない。これは、あなたが運転手かライダーのどちらかであるウーバーアプリのようなものです。 – LizG

+0

オハイオ州オクラホマ、@ Polesの提案のような地元の情報を使用してください。ビューがドライバからライダーにジャンプできない場合、なぜriderVCでコードを実行するのですか?それは到達不可能でなければなりません –

+0

あなたのアプリケーションモジュールを分離した状態に保つ方法を見つけなければなりません。 –

1

をコードを追加し、アラートを表示したい場合。 documentation here

基本的に、新しいView Controllerにセグをするときは、現在持っている値を読み込み、それを現在のView Controllerに渡します。これは、アラートをトリガするように指示するために使用できます。 (私の頭の上から)

class ViewControllerOne: UIViewController { 

    var acceptedRide: Bool = false 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == "YOUR_SEGUE_IDENTIFIER" { 
      if let destinationViewController = segue.destination as? ViewControllerTwo { 
       destinationViewController.showAlert = acceptedRide 
      } 
     } 
    } 

} 

class ViewControllerTwo: UIViewController { 
    var showAlert: Bool = false { 
     didSet { 
      if showAlert { 
       // SHOW ALERT 
      } 
     } 
    } 
} 

注:アラートを表示するdidSetを使用したくない場合があります。アラートを表示する正しい時刻を決定する必要があります。

+0

例を表示できますか? – LizG

+0

私は素早く(テストされていない)例を追加しました。それは少なくとも出発点を与えるはずです。 – Hodson

+0

この回答はSegueを介して新しいView Controllerに移動しようとしていた印象の下で書かれましたが、他の回答のコメントを読んだ後、これはあなたがやりたいことではないと信じています。 。 – Hodson

関連する問題