ios - 通过 TabBarController Swift 传递信息

标签 ios swift uitabbarcontroller

有一个 TableView Controller ,它会将 ID 字段传递给 View Controller 以检索详细信息,但是在两个 Controller 之间是一个选项卡栏 Controller 。我不确定如何在两者之间传递信息。试图使用 Segue,但一旦到达细节 Controller ,该值就为空。

EventBarTableViewCell.swift

override func prepare(for segue: UIStoryboardSegue, sender: Any?)            {
    if segue.identifier == "showEventDetail" {
        if let IndexPath = self.tableView.indexPathForSelectedRow {
            let controller = segue.destination as? eventDetailViewController

            controller?.inTradeShowID = (events?[IndexPath.row].tradeshowID!)!
            controller?.viaSegue = (events?[IndexPath.row].tradeshowID!)!
            //controller?.performSegue(withIdentifier: "tradeShowID", sender: self)
            //if shouldShowSearchResults {
            //    controller?.viaSegue = filteredArray[IndexPath.row].charterNum!
            //} else {
            //    controller?.viaSegue = repositories[IndexPath.row].charterNum!
            //}
        }
    }
}

eventDetailViewController.swift

var viaSegue = ""
var inTradeShowID = ""

 override func viewDidLoad() {
    super.viewDidLoad()

    inTradeShowID = self.viaSegue
}

需要一些帮助。

Screen Shoot of Controllers

最佳答案

您正在转到一个标签栏 Controller ,而不是您的“显示” View ,所以您需要“向下钻取”可以这么说:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showEventDetail" {

        if let IndexPath = self.tableView.indexPathForSelectedRow {

            // we're segueing to a Tab Bar Controller
            if let tabBarVC = segue.destination as? UITabBarController {

                // get the first view controller of the Tab Bar Controller
                // *that* is where you want to "pass" your data
                if let controller = tabBarVC.viewControllers?.first as? eventDetailViewController {

                    // either should work
                    controller.inTradeShowID = (events?[IndexPath.row].tradeshowID!)!
                    controller.viaSegue = (events?[IndexPath.row].tradeshowID!)!

                }  //end if let controller = tabBarVC.viewControllers?.first as? eventDetailViewController

            }  //end if let tabBarVC = segue.destination as? UITabBarController

        }  //end if let IndexPath = self.tableView.indexPathForSelectedRow

    }  //end if segue.identifier == "showEventDetail"
}

关于ios - 通过 TabBarController Swift 传递信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47314078/

相关文章:

ios - 应用打开时加载弹出 View

ios - Nib 中的 IBOutlets 在 awakeFromNib 和 initWithCoder 上都是 nil——没有 subview

ios - 点击视频按钮时 UIImagePickerController 崩溃

ios - 开始/结束外观转换的不平衡调用...- UIViewController 包含

ios - 如何在 Swift 中使用 TabBarController 在两个 ViewController 之间传递数据

javascript - 在 MobileSafari 中点击状态栏在我的测试页面上不起作用

ios - 使用 Coredata 或 NSMutableArray 的 NSPredicate 进行过滤的最佳方法?

ios - **** 的重新声明无效

ios - 重置 UITabBarController 上的导航堆栈不起作用

ios - 只在主线程运行异常