2016-08-03 169 views
0

我試圖將我從Firebase獲得的值傳遞給另一個tableView。我從Firebase獲得2個值 - 「品牌」和「產品」。我正在試圖製作汽車應用程序。如果您點擊福特,則會出現新的tableView並顯示所有福特車型。這是我迄今爲止所做的。將Firebase中的值從一個表視圖傳遞到另一個表視圖

這樣我從火力地堡獲得品牌:

func parseSnusBrands(){ 
    let ref = FIRDatabase.database().reference().child("Snuses").child("Brands") 

    ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
     if snapshot.exists() { 
      if let all = (snapshot.value?.allKeys)! as? [String]{ 
       for a in all{ 
        if let products = snapshot.value![a] as? [[String:String]]{ 
         self.snusBrandsArray.append(["key":a,"value":products]) 
        } 
       } 
       self.snusBrandsTableView.reloadData() 
      } 
     } 
    }) 
} 

而且這樣我發現被點擊的細胞,並打印屬於點擊品牌的產品:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){ 
    print("products at \(indexPath.row) --> \(snusBrandsArray[indexPath.row]["value"])") 

} 

如何將(snusBrandsArray[indexPath.row]["value"])傳遞給新的tableView?我嘗試使用segues並尋找諸如「如何在viewControllers之間傳遞值」等教程,但我運氣不佳。現在我有2 tableViewController.swift文件和一個tableViewCustomCell.swift文件。我需要更多文件嗎?

+0

如果這個tableviews在不同的控制器中,請閱讀prepareforSegue –

回答

1

對於發送數據,首先聲明的變量在第二個視圖控制器..

var productsValue = [[String:String]]() 

並在1日的ViewController

var valueTopass = [[String:String]]() 

didSelectRowAtIndexPath,參加一個valueTopass

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    print("products at \(indexPath.row) --> \(snusBrandsArray[indexPath.row]["value"])") 
    if let products = snusBrandsArray[indexPath.row]["value"] as? [[String:String]]{ 
     valueTopass = products 
     performSegueWithIdentifier("toProducts", sender: self) 
    } 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ 

    if (segue.identifier == "toProducts") { 
     var viewController = segue.destinationViewController as! SnusProductsTableViewController 
     viewController.productsValue = valueTopass 
     print(productValues) 
    } 
} 
+0

嘿!我有一個問題 –

1

您需要使用Segues來傳遞數據。

要使用segues將數據從當前視圖控制器傳遞到下一個新視圖控制器,請首先在相關的故事板中創建一個帶有標識符的Segue。覆蓋當前視圖控制器的方法prepareForSegue。在方法內部檢查您剛剛通過其標識符創建的segue。通過在向下視圖控制器上設置屬性來投射目標視圖控制器並將數據傳遞給它。

設定一個標識符用於賽格瑞:

enter image description here

塞格斯可以通過編程或通過按鈕操作事件在按ctrl +拖動到目標視圖控制器故事板設置來執行。 可以編程要求進行SEGUE,在需要時,在視圖控制器使用賽格瑞標識符:

func showDetail() { 
    performSegueWithIdentifier("showDetailingSegue", sender: self) 
} 

可以在prepareForSegue方法的重寫版本配置SEGUE有效載荷。您可以在加載目標視圖控制器之前設置所需的屬性。

夫特

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetailingSegue" { 
     let controller = segue.destinationViewController as! DetailViewController 
     controller.isDetailingEnabled = true 
    } 
} 

DetailViewController是第二視圖控制器的名稱和isDetailingEnabled是在視圖控制器公共變量。

要擴展此模式,您可以將DetailViewController上的公共方法視爲僞初始化程序,以幫助初始化任何所需的變量。這將自行記錄需要在DetailViewController上設置的變量,而無需通讀它的源代碼。這也是一個方便的地方放置默認值。

斯威夫特

func initVC(isDetailingEnabled: Bool) { 
    self.isDetailingEnabled = isDetailingEnabled 
} 
0

爲什麼不能通過整個字典,從火力使用賽格瑞準備所有的內容,新的VC? 然後將dict存儲在destinationVC數據模型中?

這應該做的伎倆。

相關問題