【问题标题】:Data transfer between child tabs in a Tab bar controller标签栏控制器中子标签之间的数据传输
【发布时间】:2017-04-01 05:36:06
【问题描述】:

我的标签栏控制器有 4 个标签,我在 VC1 中有 6 个文本字段,我想使用输入的数据在 VC2、VC3 和 VC4 中显示标签。我已经阅读了有关将数据添加到 TabBarController 子类并在其余 VC 中使用它的信息,但仍停留在实现上。我是一个绝对的初学者,任何代码或代码实现的链接都会很棒。

【问题讨论】:

    标签: ios swift ipad uiviewcontroller uitabbarcontroller


    【解决方案1】:

    试试这个:

    我创建了一个UITabBarController,其中包含两个子控制器Tab1ViewControllerTab2ViewController

    故事板屏幕截图:

    代码:

    class Tab1ViewController: UIViewController
    {
        @IBOutlet weak var testTextField: UITextField!
        override func viewDidLoad()
        {
            super.viewDidLoad()
        }
    }
    
    class Tab2ViewController: UIViewController
    {
        @IBOutlet weak var testLabel: UILabel!
        override func viewDidLoad()
        {
            super.viewDidLoad()
        }
    
        override func viewWillAppear(_ animated: Bool)
        {
            super.viewWillAppear(animated)
            let tab1Controller = self.tabBarController?.viewControllers?.first as! Tab1ViewController
            self.testLabel.text = tab1Controller.testTextField.text
        }
    }
    

    同样,您可以创建 4 个选项卡和其他文本字段。

    更多请参考:How do I pass data from a tab bar controller to one of its tabs?

    【讨论】:

    • 哇,谢谢,这符合我的需要。希望能解释一下viewWillAppear 以及如何通过封装访问变量值
    • 在 viewWillAppear 中,第一个对象是从 tabBarController 的视图控制器数组中提取的。由于这个对象是 Tab1ViewController 类型,所以它被强制转换为 Tab1ViewController 以便我们可以访问它的出口 - testTextField
    • @PGDev 如果子视图控制器嵌入在导航视图控制器中,您是否知道如何传输数据?
    【解决方案2】:

    您可以使用NotificationCenter 通知您应用程序中的任何更改。例如,您可以让视图控制器监听UITextFieldtext 属性发生更改时发生的更改,然后您可以在该视图控制器中执行操作。

    例如,如果您的第一个视图控制器中有六个文本字段,您可以让最后一个视图控制器监听在第一个视图控制器的文本字段中text 属性更改时发布的通知。然后,您的最后一个视图控制器可以在检测到更改时执行您需要执行的任何操作。

    Here 是一个很好地解释了这一点的教程。

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 2014-02-11
      • 2012-03-07
      • 1970-01-01
      相关资源
      最近更新 更多