 			return
 		}
 		sectionView.onWillDisplay?((view as? UITableViewHeaderFooterView,.footer,section))
-	}
-	
-	/// Tells the delegate that the specified footer view was removed from the table.
-	///
-	/// - Parameters:
-	///   - tableView: target tableview
-	///   - view: view of the footer
-	///   - section: section
-	public func tableView(_ tableView: UITableView, didEndDisplayingFooterView view: UIView, forSection section: Int) {
-		guard let sectionView = self.sections[section].headerView else {
-			return
-		}
-		sectionView.didEndDisplaying?((view as? UITableViewHeaderFooterView,.footer,section))
 	}
 	
 	/// Support to show right side index like in the address book

	///   - tableView: target table
	///   - cell: cell instance
	///   - indexPath: index path of the cell
    public func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
		let hashedRow = cell.hashValue
		guard let row = self.removedRows[hashedRow] else {
			return
		}
       // let cell = tableView.cellForRow(at: indexPath) // instance of the cell
       // row.onDidEndDisplay?((cell,indexPath)) // send any message
		row.onDidEndDisplay?(row)
		// free removed rows instances
		self.removedRows.removeValue(forKey: hashedRow)
    }
	
	/// Cell for a particular `indexPath` in target table
	///

	public weak var scrollViewDelegate: UIScrollViewDelegate? = nil
	
	/// This represent which table should be managed by this instance
	public private(set) weak var tableView: UITableView?
	
	/// This array contains all the removed row in an update sessions.
	/// It's used to dispatch `onDidEndDisplay` messages before a cell is definitively removed
	/// from table and deallocated.
	internal var removedRows: [Int: RowProtocol] = [:]
	
	/// This array contains all the removed sections's header/footer which are subsribed to receive
	/// `didEndDisplaying` messages. After dispatch value is removed and deallocated.
	internal var removedHeaderFooterViews: [Int: SectionProtocol] = [:]
	
	/// Default height of the header/footer with plain style
	private static let HEADERFOOTER_HEIGHT: CGFloat = 44.0
	
	/// Store removed sections temporary in order send didEndDisplay messages.
	/// Data are stored only if needed.
	///
	/// - Parameter sections: sections
	internal func keepRemovedSections(_ sections: [Section]) {
		sections.forEach {
			// For each section we want to see if there is an event for header or footer
			// which needs to be tracked on remove.
			
			if $0.headerView?.didEndDisplaying != nil { // header
				self.removedHeaderFooterViews[$0.headerView!.hashValue] = $0.headerView!
			}
			
			if $0.footerView?.didEndDisplaying != nil { // footer
				self.removedHeaderFooterViews[$0.footerView!.hashValue] = $0.footerView!
			}
		}
	}
	
	/// Store removed rows temporary in order send didEndDisplay messages.
	///
