2016-03-01 3 views
0

У меня есть UICollectionView и вы хотите перейти к DetailView, нажав кнопку custom. Мне нужно передать данные.Данные Swift/pass от UICollectionView до DetailView/Пользовательская кнопка

Кнопка является частью многоразовой ячейки.

Я получаю SIGABRT (по адресу let indexPath = sender as! NSIndexPath) со следующим кодом.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     let indexPath = sender as! NSIndexPath 

     if segue.identifier == "showDetailasDetail" { 
      let vc = segue.destinationViewController as! InfoPopupVC 
      vc .currentEvent = posts[indexPath.row] 
} 

Если я выполняю SEGUE без let indexPath = sender as! NSIndexPath и vc .currentEvent = posts[indexPath.row], у меня нет каких-либо проблем (но не передается никаких данных ...)

Помощь очень ценится.

DestinationViewController:

class InfoPopupVC: UIViewController { 

    var currentEvent: EventPosts? 

    @IBOutlet weak var infoPopupTitleLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let title = currentEvent?.title 
     infoPopupTitleLabel.text = title 

    } 
} 

EventPosts Struct:

struct EventPosts { 
    var title = "" 
    var imageUrl = "" 
    var url = "" 
    var date = "" 
} 
+0

Вы также можете отправить код, вызывающий этот метод? – Ollie

+0

Нет кода. Я просто добавил кнопку в ячейку и поместил строку из кнопки в новое представление и дал segue имя «showDetailasDetail» –

+0

Хорошо, это потому, что 'sender' является кнопкой, а не' NSIndexPath' кнопки в 'UICollectionView'. Я отправлю ответ с предложениями ниже. – Ollie

ответ

1

Вы пытаетесь конвертировать sender в NSIndexPath, где компонент (или отправителя), который называется prepareForSegue: фактически кнопка.

Быстрое исправление может заключаться в том, чтобы установить tag объект UIButton в collectionView(_:cellForItemAtIndexPath:). Тогда ваш метод будет выглядеть примерно так:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     let senderButton = sender as! UIButton 

     if segue.identifier == "showDetailasDetail" { 
      let vc = segue.destinationViewController as! InfoPopupVC 
      vc .currentEvent = posts[senderButton.tag] 
     } 
} 
+0

работает идеально. большое спасибо за быструю помощь! –

+0

Я поднимусь позже. Я достиг максимального дневного максимума: X –

+0

Прошу прощения. Но мне нужно это сделать. Да. Сегет работает И да данные передаются. Но он каждый раз передает одни и те же данные. –

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