Код ниже работает, но, вероятно, лучший способ. Моя цель - вызывать функцию UIViewController из UITableCell при выходе из режима редактирования.Лучший способ связи между UITableViewCell и UIViewController
Я делаю это, установив экземпляр ссылки UIViewController на каждый UITableViewCell, а затем вызывая функцию CancelDelete() в изменении состояния UITableViewCell.
Код кажется неэффективным, так как для каждого MyCell я сначала создаю экземпляр MyViewContoller как общедоступную переменную, а затем заменяю его ссылкой на UIViewController при инициализации UITableView.
Есть ли лучший способ сделать это?
class MyCell : UITableViewCell
{
var previousState : UITableViewCellStateMask = UITableViewCellStateMask.allZeros
// This holds a reference to the parent view controller
// Seems wasteful to instantiate since it gets replaced
var controller:MyViewController = MyViewController()
// This is called when the user aborts edit mode
override func willTransitionToState(state: UITableViewCellStateMask) {
if state & UITableViewCellStateMask.ShowingEditControlMask != nil {
if previousState & UITableViewCellStateMask.ShowingDeleteConfirmationMask != nil {
// send notification to controller
controller.CancelDelete(self)
}
}
previousState = state
}
}
class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Give cell access to this controller
var cell:MyCell = tableView.dequeueReusableCellWithIdentifier("cell") as MyCell
cell.controller = self
cell.tag = indexPath.row
}
// This is called from the table cell
func CancelDelete(cell:MyCell) {
editButtons[cell.tag].hidden = false
}
}
Это сработало. Да, я все еще нуждаюсь в коррективном тренинге Swift. Это правильный метод общения? Я надеялся, что могу определить собственный ViewController из UITableViewCell, не указывая его явно. – billd
Я не знаю, есть ли правильный путь, но это работает без необходимости иметь местозаполнитель. –