Well, I think you should not have let him continue with his shot,
unless he did it so fast you had absolutely no chance to stop him.
He might try to argue this rule:
If a foul is not called before the next shot begins, the foul is assumed not to have happened.
I guess that wouldn't apply, because the foul happened on the 'current' shot and not the 'next shot'.
But still. You want to resolve the foul the instant it happens.
If that means getting out of your chair and walking to the table then do it.
Don't stay seated and let him stay in his shooting stance, just to be "polite".
Because then it muddies the waters and he can claim he didn't see anything,
and you never said anything, you just suddenly got out your seat after he shot and took BIH.
If someone moves the cue ball 2 whole inches, I'm 99% sure they felt it and knew they fouled.
But maybe there's a tiny chance he thought you were trying to call foul ahead of time,
because you thought he was about to do an illegal jump or push shot or something.
Then it's understandable he'd be pissed.
But probably he's a bar player who is used to playing with people do never take
it seriously when someone taps the cue ball.
I was getting out of my chair as soon as I saw it happen. Never had a chance to stop him before he continued shooting. I said foul instantly. I tried to be polite initially but when he tried calling me a cheater and some of the other things that he said that do not really need to be repeated I put the big grin on my face. Yes I know it was antagonistic. I likely should have just ran the table without any expression but he simply would not stop. I likely could have been more polite with him, but I wasn't. I did not completely drop to his level, but there was certianly a higher road I could have taken. I will probably not wait to get the TD in the future.