gpt4 book ai didi

ios - 切换标签时向 Controller 发送数据

转载 作者:行者123 更新时间:2023-11-28 05:44:24 24 4
gpt4 key购买 nike

我的应用程序有 4 个选项卡。在第 4 个选项卡上,有一个“登录”应用程序的选项,它将用户带到登录 Controller 。当用户登录时,我想将用户切换回第一个选项卡,我使用以下代码执行此操作:

self.tabBarController?.selectedIndex = 0

但是,我想在用户登录后刷新第一个选项卡上的内容(因为内容是用户特定的)。这意味着我需要在用户切换选项卡时传递一些数据,让第一个选项卡中的 Controller 知道刷新数据。

在标签之间切换以刷新内容时,如何将数据发送到第一个标签?或者有更好的解决方法吗?

最佳答案

enter image description here enter image description here

您可以通过使用通知/观察者或使用委托(delegate)模式来完成。

因为它似乎是一对一的关系,所以您应该使用委托(delegate)模式,因为通知和观察者用于一对多关系。

  1. 在您的第 4 个选项卡 View Controller 代码的正上方创建一个协议(protocol)。此函数的参数将是您将从一个 ViewController 传输到另一个 ViewController 的数据。在这个例子中,我传输了一个 textField 的文本,用户可以在其中输入它的名字:

    protocol SelectionDelegate {
    func didTapChoice(name: String)
    }
  2. 在您的第 4 个选项卡 View Controller 中添加一个委托(delegate)变量:

    var selectionDelegate: SelectionDelegate!
  3. 在@IBAction 中调用委托(delegate)变量的函数:

    selectionDelegate.didTapChoice(name: textField.text!)
    tabBarController?.selectedIndex = 0
  4. 在第二个 View Controller 的 viewDidLoad() 中将选择委托(delegate)分配给第一个 View Controller :

    selectionDelegate = tabBarController?.viewControllers?[0] as? SelectionDelegate
  5. 将扩展添加到实现协议(protocol)功能的第一个选项卡 View Controller 的底部:

    extension FirstTabViewController: SelectionDelegate {
    func didTapChoice(name: String) {
    displayLabel.text = name
    }
    }

这是第一个 View Controller 的结果:

import UIKit

class FirstTabViewController: UIViewController {

@IBOutlet weak var displayLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
}
}

extension FirstTabViewController: SelectionDelegate {
func didTapChoice(name: String) {
displayLabel.text = name
}
}

这是第二个 View Controller 的结果:

import UIKit

protocol SelectionDelegate {
func didTapChoice(name: String)
}

class SecondTabViewController: UIViewController {
var selectionDelegate: SelectionDelegate!

@IBOutlet weak var textField: UITextField!

@IBAction func goToFirstTabButtonTapped(_ sender: UIButton) {
selectionDelegate.didTapChoice(name: textField.text!)
tabBarController?.selectedIndex = 0
}

override func viewDidLoad() {
super.viewDidLoad()
selectionDelegate = tabBarController?.viewControllers?[0] as? SelectionDelegate
}
}

关于ios - 切换标签时向 Controller 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435188/

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