如何将数据发送回上一个屏幕IOS/Swift



我正在IOS/swift中创建一个库,它是:

takes a user to a scene->performs a task->return to the initial scene that called the first while passing a payload back to the user

我已经想好了如何将用户带回调用它的前一个场景,但我的问题是如何使用下面的代码片段将有效载荷发送回:

func switchToPreviousPage(){
self.dismiss(animated: true, completion: nil)
}

我该如何做到这一点?

在您的场景中,您可以使用以下任意一种:

  1. 委派模式
  2. 通知/观察员

让我们讨论每一个:

1.委托:

如果你对Swift中的Protocol有想法,你可以很容易地做到。首先创建一个具有您想要实现的所需功能的协议:

protocol FirstControllerDelegate: AnyObject {
func sendData(data: String)
}

假设你的第一个页面是FirstViewController,它有一个UILabel,我们必须从我们的第二个页面中为它分配一个String,意思是SecondViewController。FirstViewController的结构可能是这样的:

class FirstViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
@IBAction func gotoSecondPage() {
let secondVC = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
}
}

现在,您的FirstViewController必须确认该协议,它将实现sendData(data:(方法:

extension FirstViewController: FirstControllerDelegate {
func sendData(data: String) {
textLabel.text = data
}
}

现在,作为iOS中协议的一个功能,协议可以作为一种类型(如Int、String(工作。因此,只需在SecondViewController中创建一个类型为FirstControllerDelegate的变量即可!

class SecondViewController: UIViewController {
weak var delegate: FirstControllerDelegate!
@IBAction func switchToPreviousPage() {
delegate.sendData(data: "Hello")
self.dismiss(animated: true, completion: nil)
}
}

现在,您可以使用上面创建的变量调用sendData(data:(函数!

最后你必须做一件事,只需分配代表:

secondVC.delegate = self

它应该在gotoSecondPage((方法内部!

2.通知/观察员

有了这个,我们的基本想法是在我们的应用程序中发送一个通知,它可以被里面的任何地方观察到!

因此,我们的SecondViewController将发送一个嵌入了我们想要传递的所需数据的通知,FirstViewController将收到通知,并从通知中提取数据!!

每个通知都有一个特定的名称,这将使其与其他通知不同。我们必须创建名称:

Notification.Name(rawValue: "com.app.notificationObserver")

现在FirstViewController将观察这个特定的通知:

override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.changeLabelText(notifcation:)), name: Notification.Name("com.app.notificationObserver"), object: nil)
}

我们必须定义changeLabelText(通知:(方法:

private func changeLabelTExt(notification: NSNotification) {
if let dataDict = notification.userInfo as NSDictionary? {
if let message = dataDict["data"] as? String {
self.textLabel.text = message
}
}
}

最后,SecondViewController将触发Notification:

@IBAction func switchToPreviousPage() {
NotificationCenter.default.post(name: Notification.Name(rawValue: "com.app.notificationObserver"), object: ["data": "hello"])
self.dismiss(animated: true, completion: nil)
}

仅此而已。。。。。

相关内容

  • 没有找到相关文章

最新更新