prepareForSegue collectionView indexPath с использованием Swift

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

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

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

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'

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

ОТВЕТ

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
            }
        }
    }

person SKYnine    schedule 13.11.2014    source источник
comment
indexPathsForSelectedItems возвращает массив, но вы присваиваете его переменной типа NSIndexPath.   -  person ylin0x81    schedule 13.11.2014
comment
что именно вы хотите сделать?   -  person Saurabh Prajapati    schedule 13.11.2014


Ответы (2)


Если вы просто пытаетесь просто найти путь к индексу выбранной ячейки, а не несколько, вы можете сделать это в своем методе 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 (или пользовательский подкласс ячейки, если вы его создали).

ОБНОВЛЕНИЕ:
Swift 1.2 представил as! вместо as для этой цели, поэтому в целях безопасности вы можете попробовать это внутри prepareForSegue, используя несколько привязок:

if let cell = sender as? UICollectionViewCell, indexPath = collectionView.indexPathForCell(cell) {
    // use indexPath
}
person BJ Miller    schedule 13.11.2014
comment
Я думал, что сотовый будет отправителем. Спасибо за информацию! - person moonman239; 16.07.2015

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

var indexPath : NSArray = self.collectionView.indexPathsForSelectedItems()
person Dharmesh Kheni    schedule 13.11.2014