2016-02-02 5 views
0

Я создал пользовательский cell с кнопкой внутри. Теперь я пытаюсь передать данные, нажав эту кнопку, но can not catch indexPath, вам нужна ваша помощь.изготовленный под заказ cell segue используя кнопка swift

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

    if (segue.identifier=="editData"){ 
     if let indexPath = tableView.indexPathForSelectedRow { 
      let destinationController = (segue.destinationViewController as! AddDetail) 
      destinationController.info = data[indexPath.row] 
       let nItem : Dealers = data [indexPath.row] 
       destinationController.nItem = nItem 

также Im пытается сделать то же самое, но из меню провести пальцем:

  override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?{ 
      let edit = UITableViewRowAction(style: .Normal, title: "Edit") { (action, indexPath) in 
      self.performSegueWithIdentifier("addDealer", sender: self) 
      let name = self.data [indexPath.row].dealerName 

      print(name) 
    } 

    edit.backgroundColor = UIColor.lightGrayColor() 

    return [delete, edit] 

возможно пройти переход от ударяя меню?

ответ

0

Попробуйте использовать tableView.indexPathForCell(selectedCell) вместо tableView.indexPathForSelectedRow; вы сначала извлечь selectedCell в качестве пользовательского табличного ячейки (YourCustomTableViewCell ниже):

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "editData" { 
     let destinationController = segue.destinationViewController as! AddDetail 
     if let selectedCell = sender as? YourCustomTableViewCell { 
      let indexPath = tableView.indexPathForCell(selectedCell)! 
      destinationController.info = data[indexPath.row] 
      let nItem : Dealers = data[indexPath.row] 
      destinationController.nItem = nItem 
     } 
    } 
} 

Что касается Swiping вопрос: Я вернусь ответ на это.

+0

это открытие AddDetail форму, но не передавая значения (nItem) в виде – Rufat

+0

@Rufat Обратите внимание, что _does_ передавать значения (до "открытия" вид контроллера AddDetail) , см. строку: 'destinationController.nItem = nItem'. (Свойство 'nItem' контроллера точки назначения, то есть экземпляр' AddDetail', который «открывается», получает обновление локальной переменной 'nItem', которая только что была извлечена из' data', 'let nItem: Dealers = данные [indexPath.row] '.). Тем не менее, вам сложно помочь вам, не глядя больше на ваш код (ваш Q выше просто показывает заглушку). – dfri

0

Вы можете пройти indexPath в качестве sender в performSegueWithIdentifier.

self.performSegueWithIdentifier("addDealer", sender: indexPath) 

затем

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
if let indexPath = sender as? NSIndexPath { 
    // then here you know what the indexPath was 
    // and can do whatever you want with it 
} 
... 
+0

Извините, может быть, глупый вопрос, что должно быть после? В моем случае «guard let row = (sender as? NSIndexPath) ?. row else {return}" – Rufat

+0

Я отредактировал ответ. Это понятно? – emrys57

+0

Да, это так! Большое спасибо! – Rufat

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