簡體   English   中英

使用標簽和PerformSegueWithIdentifier通過tabBar DidSelectItem傳遞數據

[英]Passing data with tabBar DidSelectItem using tags and PerformSegueWithIdentifier

我正在使用swift 3具有taBbar,當我選擇tabBarItem時,將以編程方式調用segue以轉到新的View Controller。 我還需要通過此segue傳遞一些數據。

我的代碼(用於標簽欄didSelectItem):

 func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
        if item.tag == 0 {
            self.performSegueWithIdentifier("nearbyHotelsSegue", sender: nil)
        } else if item.tag == 1 {
            self.performSegueWithIdentifier( "nearbyRestaurantsSegue", sender: nil)
        } else if item.tag == 2 {
            self.performSegueWithIdentifier( "nearbyEventsSegue", sender: nil)
        } else if item.tag == 3 {
            self.performSegueWithIdentifier( "morePlacesSegue", sender: nil)
        } 
    }

到目前為止,根據我的研究,我知道可以為此使用PrepareForSegue,但是不能在tabBar(didSelectItem)方法中使用它。 如何使用選項卡的didSelectitem方法傳遞數據,或者有沒有其他好的方法來實現此目的? 謝謝。

prepareForSegue方法用作重寫的方法,因此應在tabBar函數的范圍之外使用它。 當您調用performSegue(withIdentifier: "segueName", sender: nil) ,您在發送者中給出了nil Sender是類型為Any?的參數Any? ,您將自定義數據傳遞到另一個控制器的位置。 當您將目標視圖控制器轉換為要使用的控制器時prepare(forSegue: UIStoryboardSegue, sender: Any?)prepare(forSegue: UIStoryboardSegue, sender: Any?) ,將發送方數據傳遞給此控制器,例如:

override func prepare(forSegue: UIStoryboardSegue, sender: Any?) {
if let controller = segue.destination as? YourDestinationViewController {
controller.receivedData = sender
}
}

我使用以下代碼解決了這個問題。 似乎prepareForSegue不受使用PerformSegueWithIdentifier來以編程方式執行segue的影響。
因此,我使用了在問題中張貼的代碼不變,然后添加了以下代碼來傳遞數據。

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "nearbyHotelsSegue" {

            if let toViewController = segue.destinationViewController as? NearbyHotelsViewController {
                toViewController.returnedText = (searchBaseItem?.baseItemId)!
            }
        }

//....other ifs
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM