     
     override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
         if let touch = touches.first , bounds.contains(touch.location(in: self)) {
-            currentTouch = touch
-            isHighlighted = true
+            beginTouch(touch)
             processTouch(touch)
         }
         super.touchesBegan(touches, with: event)

            return
        }
        currentIndex = idx
        
        if let delegate = self.delegate
            , delegate.responds(to: #selector(TableViewIndexDelegate.tableViewIndex(_:didSelect:at:))) {

        currentTouch = nil
        currentIndex = nil
        isHighlighted = false
        cleanupFeedbackGenerator()
    }
    
    // MARK: - Taptic Engine support
    
    @available(iOS 10.0, *)
    private var feedbackGenerator: UISelectionFeedbackGenerator {
        if feedbackGeneratorInstance == nil {
            feedbackGeneratorInstance = UISelectionFeedbackGenerator()
        }
        return feedbackGeneratorInstance as! UISelectionFeedbackGenerator
    }
    private var feedbackGeneratorInstance: Any? = nil
    
    private func prepareFeedbackGenerator() {
        if #available(iOS 10.0, *) {
            feedbackGenerator.prepare()
        }
    }
    
    private func notifyFeedbackGenerator() {
        if #available(iOS 10.0, *) {
            feedbackGenerator.selectionChanged()
            feedbackGenerator.prepare()
        }
    }
    
    private func cleanupFeedbackGenerator() {
        if #available(iOS 10.0, *) {
            feedbackGeneratorInstance = nil
        }
    }
}

