2014-11-13 4 views
3

Я не могу найти хороший пример, чтобы делать то, что я хочу, используя swift, поэтому я позволяю себе задавать вопрос.prepareForSegue collectionView indexPath using swift

Im using collectionView для отображения PFObjects, и я хочу отправить отображаемые данные соты на второй контроллер, используя prepareForSegue.

На данный момент, Im изо всех сил, чтобы сделать эту часть кода работает:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "goto_answerquestion"){ 
      var indexpath : NSIndexPath = self.collectionView.indexPathsForSelectedItems() 
     } 
    } 

эту строку:

var indexpath : NSIndexPath = self.collectionView.indexPathsForSelectedItems() 

вызывает следующую ошибку:

(UICollectionView, numberOfItemsInSection: Int)-> Int does not have a member named 'indexPathsForSelectedItems' 

пожалуйста, дайте я знаю, если Im использует неправильный метод, или если вам нужны дополнительные данные, чтобы иметь соответствующий обзор проблема.

ОТВЕТ

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "segue_identifier"){ 
      // check for/catch all visible cell(s) 
      for item in self.collectionView!.visibleCells() as [UICollectionViewCell] { 
       var indexpath : NSIndexPath = self.collectionView.indexPathForCell(item as CollectionViewCell)! 
       var cell : CollectionViewCell = self.collectionView!.cellForItemAtIndexPath(indexpath) as CollectionViewCell 

       // Grab related PFObject 
       var objectData:PFObject = self.questionData.objectAtIndex(indexpath.row) as PFObject 

       // Pass PFObject to second ViewController 
       let theDestination = (segue.destinationViewController as answerPageViewController) 
       theDestination.questionObject = objectData 
      } 
     } 
    } 
+1

'indexPathsForSelectedItems' возвращает массив, но вы назначаете его переменной типа NSIndexPath. –

+0

что именно вы хотите сделать? –

ответ

9

Если вы просто пытаетесь просто найти путь индекса ячейки отводами, а не несколько, вы могли бы сделайте это в своем методе prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let indexPath = collectionView.indexPathForCell(sender as UICollectionViewCell) 
    // do what you need now with the indexPath 
} 

sender в этой ситуации - ячейка, которую вы прослушивали, поэтому вам просто нужно отдать ее в UICollectionViewCell (или пользовательский подкласс, если вы сделали это).

UPDATE:
Swift 1,2 представил as! заменить as для этой цели, так, чтобы с безопасностью, вы можете попробовать это в prepareForSegue с помощью нескольких привязок:

if let cell = sender as? UICollectionViewCell, indexPath = collectionView.indexPathForCell(cell) { 
    // use indexPath 
} 
+0

Я думал, что камера будет отправителем. Спасибо за информацию! – moonman239

2

Это может решить вашу проблему:

var indexPath : NSArray = self.collectionView.indexPathsForSelectedItems()