gpt4 book ai didi

ios - 呈现 UIViewController 并将数据传回呈现 View

转载 作者:行者123 更新时间:2023-11-29 01:05:02 25 4
gpt4 key购买 nike

我有一个应用程序,要求您在应用程序中多个位置的模式 UIViewController 中选择数据。想象一下:您想查看一家餐厅是否有可用的 table -> 在您从列表中选择一家餐厅的地方弹出一个模态 UIViewController,它会关闭它并将数据传回呈现看法。您想要查看相关餐厅 -> 模式 UIViewController 会弹出,您可以在列表中选择餐厅的位置将其关闭并将数据传回呈现 View 。等等

现在,我可以通过在呈现 View 中设置 RestaurantViewController.delegate = self 来做到这一点。然后我可以调用类似 [delegate pickRestaurant:restaurant]; 的内容,但我不喜欢这种不通用的做法。

还有其他方法可以通过数据回调来呈现 UIViewController 吗?

最佳答案

delegate 设计模式在您想要将数据传回呈现 UIViewController 时很有用,正如您在问题中指出的那样。如果您不想采用委托(delegate)设计模式,那么也许您可以使用 NSNotificationCenter?它不会占用太多内存,它会触发应用程序范围的广播,该广播可以由 NSObserver 接收,您可以将其放置在呈现的 UIViewController 中(假设您呈现的 UIViewController 仍然在内存中。例如,代码可以看起来像这样:

ViewControllerA.swift

override func viewDidLoad(){
super.viewDidLoad()
let notifCenter = NSNotificationCenter.defaultCenter()
notifCenter.addObserver(self, selector: #selector(ViewControllerA.methodToTrigger), name: "pickedRestaurantNoti", object: nil)
}

func methodToTrigger(notification:NSNotification){

let userInfo:Dictionary<String,String!> = notification.userInfo as Dictionary<String,String!>
let pickedRestaurantFromB = userInfo["pickedRestaurant"]
// pickedRestaurantFromB should have the value of "Restaurant 1"
// handle that value now that you have gotten it

}

ViewControllerB.swift

func someMethod(){
let notifCenter = NSNotificationCenter.defaultCenter()
notifCenter.postNotificationName("pickedRestaurantNoti",
object:nil,
userInfo:["pickedRestaurant":"Restaurant 1"])
}

关于ios - 呈现 UIViewController 并将数据传回呈现 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36516010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com