2016-06-23 2 views
1

У меня есть контроллер просмотра коллекции с несколькими ячейками. У каждой ячейки есть кнопка, и я хочу перейти к другому контроллеру представления с помощью кнопки ckick в ячейке коллекции. Я могу сделать это, щелкнув по ячейке, но я хочу сделать, нажав на кнопку в ячейке, а не щелкнув по ячейке. Я знаю, как сделать это, нажав на ячейку, например:Как перейти к другому контроллеру представления, нажав на кнопку в ячейке просмотра коллекции

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    if let book = books?[indexPath.item] { 
     showBookDetail(book) 
    } 
} 

func showBookDetail(book: Book) { 
     let layout = UICollectionViewFlowLayout() 
     let bookDetailVC = BookDetailVC(collectionViewLayout: layout) 
     bookDetailVC.book = book 
     navigationController?.pushViewController(bookDetailVC, animated: true) 
    } 

Это просто потому, что у меня есть indexPath и может послать как параметр.

Как я пытаюсь сделать это:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellId, forIndexPath: indexPath) as! BookCell 
    cell.chapter = books?.bookChapters?[indexPath.item] 
    cell.goButton.addTarget(self, action: #selector(goChapter), forControlEvents: .TouchUpInside) 
    return cell 
} 

но как отправить book на мой FUNC goChapter вне didSelectItemAtIndexPath?

func goChapter() { 
    let layout = UICollectionViewFlowLayout() 
    let bookChapterVC = BookChapterVC(collectionViewLayout: layout) 
    bookChapterVC.chapter = self.book?.bookChapters![0] // here I want to send separate chapter of the book 
    navigationController?.pushViewController(bookChapterVC, animated: true) 
} 

ответ

1

Вы можете получить UIButton щелкнул индекс, как таким образом:

func goChapter(sender: UIButton!) { 
    var point : CGPoint = sender.convertPoint(CGPointZero, toView:collectionView) 
    var indexPath = collectionView!.indexPathForItemAtPoint(point) 
    bookChapterVC.chapter = self.book?.bookChapters![indexPath.row] 
    navigationController?.pushViewController(bookChapterVC, animated: true) 
} 

Обновить ваш addTarget как показано ниже:

cell.goButton.addTarget(self, action: #selector(goChapter(_:)), forControlEvents: .TouchUpInside) 

Надеется, что это помогает!

+1

Да, это работает. Благодаря! – andrey

0

Я нашел простое решение: в функции cellForItemAtIndexPath

cell.goButton.tag = indexPath.item 
cell.goButton.addTarget(self, action: #selector(goChapter), forControlEvents: .TouchUpInside) 

, а затем:

func goChapter(sender: UIButton!) { 
    let layout = UICollectionViewFlowLayout() 
    let bookChapterVC = BookChapterVC(collectionViewLayout: layout) 
    bookChapterVC.chapter = book?.bookChapters![sender.tag] 
    navigationController?.pushViewController(bookChapterVC, animated: true) 
} 
Смежные вопросы