Even though another answer has been accepted, I'll add one more possible problem and solution for people who observe this issue:
If you have automatic reference counting (ARC) turned on, you may find that even after assigning your controller as a delegate of the view, the view's messages to the controller are not being received because ARC is deleting the controller. Apparently the UITableView's delegate pointer does not count as a reference for the ARC, so if that is the only reference to it, the controller will be dealloc'd. You can verify whether or not this is happening by implementing the dealloc method on the controller and setting a breakpoint or NSLog call there.
The solution is to keep track of the controller with a strong reference somewhere else, until you are sure you won't need it anymore.
UITableView
? – yhl-didSelectRowAtIndexPath
. I figured out hat's because I have a tap gesture recognizer on the tableview and the gesture has to fail first before receiving the touch. Though it's weird the table selection animation is not affected by the gesture recognizer. – Hlung