2015-04-03 7 views
1

Я использую UICollectionViewDataSource & UICollectionViewDelegate в моем личном файле подкласса ViewController. Теперь я могу щелкнуть ячейку в CollectionView и перейти к дочернему элементу ViewController, который я хочу, но метод цели viewDidLoad всегда запускается до didSelectItemAtIndexPath, поэтому я не могу получить информацию выбранной ячейки до того, как выйдет представление, например, чтобы получить имя метки выбранной ячейки.Зачем запускать viewDidLoad до didSelectItemAtIndexPath?

Ниже приведены коды, которые я сделал сейчас, строка 2 всегда идет до строки 1, но мне нужно сначала получить строку 1, любые идеи?

в ViewController UICollectionView с источником данных и делегата:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    println("1") //line 1 
} 

в ViewController цели:

override func viewDidLoad() { 
    super.viewDidLoad() 

    println("2") //line 2 
} 

P.S: толчок переход использует от основной цели.

+0

Вы реализовали 'prepareForSegue: sender:' в контроллере представления коллекции? –

+0

У меня была 'prepareForSegue', но ничего внутри, никаких утверждений не требуется? –

ответ

0

Использовать prepareForSender:segue: вместо collectionView:didSelectItemAtIndexPath:. sender - это ячейка, которую прослушивали. Если вам нужен его индексный путь, вы можете получить его из вида коллекции, используя indexPathForCell: (передавая sender в качестве аргумента).

+0

Спасибо! Но я пытаюсь заменить 'didSelectItemAtIndexPath' на' didHighlightItemAtIndexPath', и я могу получить то, что хочу! И я узнал, что 'didHighlightItemAtIndexPath' запускается до' prepareForSender', что-то не так, если я использую 'didHighlightItemAtIndexPath' вместо' prepareForSender'? –

1

Использование didHighlightItemAtIndexPath вместо didSelectItemAtIndexPath решило мою проблему.

Смежные вопросы