2016-03-18 51 views
0

從我已經集成集合視圖的主控制器,我要選擇的單元索引路徑傳遞到另一個視圖控制器(詳細信息視圖) 所以我可以用它用於更新特定記錄。雨燕2.1 - 如何通過的CollectionView細胞的指數路徑排Segue公司

我有以下工作prepareForSegue

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

    if segue.identifier == "RecipeDetailVC" { 

     let detailVC = segue.destinationViewController as? RecipeDetailVC 

     if let recipeCell = sender as? Recipe { 
      detailVC!.recipe = recipeCell 

     } 
    } 
} 

我累了,包括let indexPath = collection.indexPathForCell(sender as! UICollectionViewCell)但我在運行時得到Could not cast value of type 'xxx.Recipe' (0x7fae7580c950) to 'UICollectionViewCell'

我也有performSegueWithIdentifier("RecipeDetailVC", sender: recipeCell),我不知道是否可以使用它來傳遞選定單元格的索引路徑,但不知道我可以將此索引添加到發件人。

+0

當你調用執行賽格瑞使發送者要發送的對象,而不是電池本身。 –

+0

你說我可以讓indexpath成爲發件人呢?在這種情況下,如何在目標控制器中接收此索引路徑? –

回答

0

我不清楚你collectionViewCell的層次結構。但我認爲sender可能不是一個單元格。嘗試使用

let indexPath = collection.indexPathForCell(sender.superView as! UICollectionViewCell) 

let indexPath = collection.indexPathForCell(sender.superView!.superView as! UICollectionViewCell) 

這可能工作。

+0

謝謝,但我得到'致命的錯誤:意外地發現零,而解包可選值'任何想法? –

0

我已經寫了一個簡單的例子來告訴你,它使用的tableView但概念是相同的:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var things = [1,2,3,4,5,6,7,8] // These can be anything... 

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = UITableViewCell() 
    let objectForCell = self.things[indexPath.row] // Regular stuff 
    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let objectAtIndex = self.things[indexPath.row] 
    let indexOfObject = indexPath.row 
    self.performSegueWithIdentifier("next", sender: indexOfObject) 
} 

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

    if segue.identifier == "next" { 
     // On this View Controller make an Index property, like var index 
     let nextVC = segue.destinationViewController as! UIViewController 
     nextVC.index = sender as! Int 
    } 
} 
} 

在這裏你可以看到你得到實際的對象本身,並用它作爲發件人在執行segue方法。您可以在prepareForSegue中訪問它,並將其直接分配給目標視圖控制器上的一個屬性。

+0

我可以將數據發送到其他視圖控制器,但不是實際的索引號。我可以只發送indexPath到其他視圖控制器嗎?如果可以,我如何在目標視圖控制器中接收此indexPath? –

+0

我已更新我的答案,以顯示索引的傳遞以及將它分配給prepareForSegue中的屬性的評論。 –

+0

我得到'無法投型「Project.Recipe」(0x7fedc2e7bb30)的值設爲「NSNumber''當我做nextVC!=的.index作爲發件人!詮釋 我創建指標變量在目的地視圖控制器 –