一个带有3个故事板的设备中的应用程序:Main,Rider,Driver 在Driver storyboard,DriverVC.swift中,当驾驶员接受乘车时,变量:“acceptedRyde = true”需要传递给Rider故事板,RiderVC触发警报以在Rider Storyboard中弹出。
如何做到这一点?
答案 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存储的数据作为初始密钥,但如果您在此处执行此操作,那么其他任何人都无法访问数据。
然后你不需要向司机推送任何东西,让他们用这样的东西观察变化
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)