2016-08-17 3 views
0

Я хочу использовать segue для отображения страницы с подробным описанием выбранного UICollectionViewCell, однако эта ячейка находится внутри UITableViewCell. проблема в том, что я не могу использовать «performSegueWithIdentifier» в TableViewCell (тот, который содержит CollectionView), я понимаю, что эту функцию можно использовать только в UIViewController, но мои данные (из JSON) получены в TableViewCell. Я не знаю, как получить доступ к ним из ViewController, или, может быть, я могу использовать другой способ для выбора CollectionViewCell в TableViewCell. Вот мой код:Swift: Как использовать Segue при выборе UICollectionViewCell (внутри UITableViewCell)

class TableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate { 

var posts1: [Posts] = [Posts]() 
var posts2: [Posts] = [Posts]() 
var categories: [Category] = [Category]() 
var selectedPost1: Posts? 

У меня есть 2 массивов (post1 и posts2), я хочу, чтобы переход, чтобы показать детали всех элементов как в posts1 и posts2 массиве.

Я пытался добавить функцию:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    self.selectedPost1 = self.posts1[indexPath.row] 


} 

но внутри я не могу назвать "performSegueWithIdentifier". любые предложения по решению этой проблемы? Благодарю.

ответ

0

Используйте prepareForSegue на viewController, и вы можете проверить свой идентификатор, а затем создать экземпляр правильного контроллера вида, в который хотите перейти. Вы можете проверить это example

+0

Я знаю, как использовать его, когда он находится в UITableViewController или UIViewController, но моя ячейка находится внутри другой ячейки, как я могу вызвать эту функцию внутри ячейки? –

+0

У вас должен быть главный UITableViewController, где ваша ячейка правильная? И вы создали segue из ячейки для подробного просмотра? Я предлагаю, чтобы вы перешли в свой UITableViewController, вы переопределите prepareForSegue (не выполняетеSegueIdentifier). Как это, например, переопределения Func prepareForSegue (SEGUE: UIStoryboardSegue !, отправитель:! AnyObject) { если (segue.identifier == "Load View") {// передавать данные следующего вида }} –

+0

да, уже сделал это. Но у меня проблемы с передачей данных. Я загрузил все данные из Интернета и сохранил их в массиве, а массив находится в классе UICollectionView (который находится внутри TableView). Как я могу передать их в основном UITableViewController? это похоже на то, что все мои данные хранятся внутри «posts1», как я могу передать их в основной UITableView? Благодарю. жаль, что я новичок в Свифт. –

0

Вам нужно добавить расширение в вашем UITableViewCell

extension UITableViewCell { 
var parentViewController: UITableViewController? { 
    var parentResponder: UIResponder? = self 
    while parentResponder != nil { 
     parentResponder = parentResponder!.nextResponder() 
     if let viewController = parentResponder as? UITableViewController { 
      return viewController 
     } 
    } 
    return nil 
} 

}

затем в didSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    collectionView.deselectItemAtIndexPath(indexPath, animated: true) 
    if let tableController = parentViewController as? NameOfYourTableViewController { 
     tableController.performSegueWithIdentifier(SegueIdentifier, sender: nil) 
    } 
}