2015-07-28 2 views
2

Я использую xCode 7 beta и Swift для реализации tableview с помощью MGSwipeTableCells. Я делаю это, потому что мне нужно иметь кнопку прокрутки слева и справа от каждой ячейки. Обе эти кнопки должны удалить ячейку из таблицы.Swift MGSwipeTableCell Swipe to Delete Cell

Я попытался сделать это с помощью метода удобства обратного вызова при добавлении кнопки клетки:

// Layout table view cell 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier("newsFeedCell", forIndexPath: indexPath) as! NewsFeedCell 
    cell.layoutIfNeeded() 

    // Add a remove button to the cell 
    let removeButton = MGSwipeButton(title: "Remove", backgroundColor: color.removeButtonColor, callback: { 
     (sender: MGSwipeTableCell!) -> Bool in 

     // FIXME: UPDATE model 
     self.numberOfEvents-- 
     self.tableView.deleteSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.Fade) 
     return true 
    }) 
    cell.leftButtons = [removeButton] 

Однако после того, как я удаляю первую ячейку, все индексы скидываются и обратный вызов в настоящее время удаляет неправильная ячейка. То есть, если я удалю cell_0, cell_1 теперь станет первым 0-м в таблице. Тем не менее, обратный вызов для кнопок, связанных с cell_1, удаляет ячейку с индексом 1, даже если она фактически является 0-й ячейкой в ​​таблице.

Я попытался реализовать методы делегирования MGSwipeTableCell, но безрезультатно. Ни один из этих методов никогда не вызывался при выполнении моего кода. Как мне исправить эту проблему? Будет ли решение делегата решить эту проблему? Если бы, можно было бы привести пример? Если нет, можете ли вы предложить альтернативный способ иметь ячейки таблицы со стрелковыми кнопками с обеих сторон, которые могут удалять указанные ячейки?

ответ

1

Вы также можете сделать что-то вроде этого, чтобы получить правильный indexPath:

let removeButton = MGSwipeButton(title: "Remove", backgroundColor: color.removeButtonColor, callback: { 
      (sender: MGSwipeTableCell!) -> Bool in 

    let indexPath = self.tableView.indexPathForCell(sender)   
    self.tableView.deleteSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.Fade) 
      return true 
     }) 
0

Использование методов делегирования позволит более чистого создания кнопки и удаления ячейки таблицы, так как кнопки будут созданы только для клеток при он сбрасывает память (сохраняет память), и вы можете фиксировать слабую ссылку на «отправитель» (MGTableViewCell или настраиваемый тип) в обработчике, из которого вы можете получить индексный путь. Следуйте их примеру на Github: «я» MGSwipeTableCell/демо/MailAppDemo/MailAppDemo/MailViewController.m

Затем в cellForRowAtIndexPath, не забудьте установить делегата ячейки в Похоже, вам не хватает этого, и он должен исправить вашу проблему с помощью методов делегата.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let reuseIdentifier = "cell" 
    let cell = self.table.dequeueReusableCellWithIdentifier(reuseIdentifier) as! MGSwipeTableCell! 
    cell.delegate = self 

    // Configure the cell 

    return cell 
} 

Счастливое кодирование!

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

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