如何将 UITextField 的内容传递给另一个由 UITabbarController 链接的 UITableViewController

How to pass content of UITextField to another UITableViewController linked by UITabbarController

我是 swift 3 中 iOS 开发的新手,我遇到了一些麻烦。 如下图所示,我有 2 个 UITableViewController,第一个带有文本字段。这两个 tableViews 由 tabbarController 链接 我想恢复文本字段的内容以在 secondTableViewController 中使用它。 我不知道该怎么做,关于数据传递的最常见教程用按钮操作进行了解释,但如果可能的话,我想简单地恢复更改 tableView 中的数据。

我希望我的问题很清楚。

在我的第一个 UITableViewController 中:

class InvestmentTableViewController: UITableViewController, UITabBarControllerDelegate

var someVariable: Float?

override func viewDidLoad()
{  
    super.viewDidLoad()

    self.tabBarController?.delegate = self
}

  func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UITableViewController) -> Bool
{

    let selectedVC:ExtraChargesTableViewController = viewController as! ExtraChargesTableViewController
    selectedVC.totalInvest = self.someVariable

    return true

}

在我的另一个 tabView 中

class ExtraChargesTableViewController: UITableViewController
{

 var totalInvest: Float?

我不知道如何解决这个问题。

假设您有一个基于标签栏的项目,其中有两个视图控制器 FirstVC 和 SecondVC。 在 firstVC 中,您有一个 textField,并且您希望在 SecondVC 中使用该 textField。您可以在 shouldSelectViewController 委托方法中传递文本字段。所以这里是 FirstVC 应该看起来像

class FirstViewController: UIViewController,UITabBarControllerDelegate {

    @IBOutlet weak var txtFldFirst: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.tabBarController?.delegate = self;
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool
    {
        NSLog("view controller descriptionn should select = %@", viewController.description);
        let selectedVC:SecondViewController = viewController as! SecondViewController
        selectedVC.txtFld = self.txtFldFirst


        return true;
    }

SecondVC 应该是这样的

class SecondViewController: UIViewController {

    var txtFld : UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        NSLog("text fld = %@", txtFld.text);
    }

输出将是 FirstVC 中存在的文本字段的文本。

UITableViewController,同理

import UIKit

class FirstTableViewController: UITableViewController,UITabBarControllerDelegate {

    var txtFldFirst:UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()

        txtFldFirst = UITextField(frame: CGRectMake(20, 100, 150, 30));
        txtFldFirst.text = "Hello World"
        self.view.addSubview(txtFldFirst);

        self.tabBarController?.delegate = self;
    }


    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool
    {
        NSLog("view controller descriptionn should select = %@", viewController.description);
        let selectedVC:SecondTableViewController = viewController as! SecondTableViewController
        selectedVC.txtFld = self.txtFldFirst


        return true;
    }

第二张表VC

import UIKit

class SecondTableViewController: UITableViewController {

    var txtFld:UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()


        NSLog("text fld text = %@", self.txtFld.text);
    }

编码愉快...