2015-05-25 3 views
0

Я занимаюсь разработкой приложения. В моем приложении я нажимаю кнопку флажка, чтобы удалить строку. Я пишу этот код для того, чтобы пройти indexPath.row в мою кнопку CheckBox:Как передать indexPath (не indexPath.row) в мой IBAction для моего UITableViewCell

cell.checkbox.tag = indexPath.row 
cell.checkbox.addTarget(self, action: "checkAction:", forControlEvents: .TouchUpInside) 

Первый код позволяет мне доступ к indexPath.row, а второй позволяет мне создать функцию при нажатии кнопки моя , Это функция я использую, когда нажата кнопка:

@IBAction func checkAction(sender: UIButton) { 
    taskMgr.removeTask(sender.tag) 
    tblTasks.reloadData() 
} 

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

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 

Однако, у меня есть только доступ к indexPath.row в моей функции checkAction. Как получить доступ к indexPath (не жертвуя indexPath.row)?

ответ

4

Метки могут дать вам ошибочную строку, если вы перемещаете строки вокруг или добавляете или удаляете строки до тех пор, пока вы не перезагрузите всю таблицу. Итак, вместо использования тегов вы можете использовать indexPathForRowAtPoint: в своем методе кнопок, чтобы получить indexPath.

@IBAction func checkAction(sender: UIButton) { 

    let point = sender.convertPoint(CGPointZero, toView: self.tableView) 
    let indexPath = self.tableView.indexPathForRowAtPoint(point) 
    taskMgr.removeTask(indexPath.row) 
    tblTasks.reloadData() 
} 
+0

Спасибо, это сработало! – nintyapple

0

Вы можете сохранить indexPath в контроллере представления:

class ViewController: UITableViewController { 

    var toDeletedIndexPath: NSIndexPath? 

    @IBAction func checkAction(sender: UIButton) { 
     var cell = sender 
     do { 
      cell = cell.superview 
     } while cell.isKindOfClass(UITableViewCell) 

     self.toDeletedIndexPath = self.tableView.indexPathForCell(cell) 

     tblTasks.reloadData() 
    } 
} 

затем

tableView.deleteRowsAtIndexPaths([self.toDeletedIndexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
+0

Это опасно. Различные версии iOS могут иметь различное количество просмотров между кнопкой и ячейкой. – rdelmar

0

Если у вас есть только один раздел в виде таблицы, чем я хотел бы предложить вам присвоить тег экземпляр UIButton и значение тега должно быть равно indexPath.row

Но если у вас есть несколько разделов, и вам нужно получить доступ к index path, чем в случае касания кнопки через отправителя, чем я думаю, вы должны подклассифицировать UIButton и добавить атрибут NSIndexPath. Когда вы создаете экземпляр Custom UIButton, тогда назначьте путь указателя к атрибуту index pathcustom button instance. Теперь, когда нажата кнопка, вы можете получить доступ к указательному пути, так как это атрибут Custom UIButton.

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

  • Нет связанных вопросов^_^