使用swift在故事板之间传递数据

时间:2017-01-31 12:20:52

标签: ios swift3

一个带有3个故事板的设备中的应用程序:Main,Rider,Driver 在Driver storyboard,DriverVC.swift中,当驾驶员接受乘车时,变量:“acceptedRyde = true”需要传递给Rider故事板,RiderVC触发警报以在Rider Storyboard中弹出。

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以使用prepare(for:sender:)。见documentation here

基本上,当您要进入新的视图控制器时,请读取您拥有的当前值并将它们传递给您要访问的视图控制器。这可以用来告诉它触发警报。

示例(脱离我的头脑)

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来显示提醒。您需要确定显示警报的正确时间。

答案 1 :(得分: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
        }
    })

当你开始接受游乐设施时,你必须小心确保两名司机不要同时尝试这样做 - 所以包括尝试接受它的步骤,然后检查看看如果你管理

Firebase示例非常广泛,应该向您展示所需的一切

答案 2 :(得分: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?

如果您想显示提醒,只需在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)