The main thread does not responds to events if its busy, use GCD to add this to Queue
Check if this function is called while scrolling. If yes , then simply using GCD will solve your problem.
-(void)userTapOnRightBarButton{ NSLog(@"Main thread response to touch during scrolling"): dispatch_async(dispatch_get_main_queue(), ^{ [self addSearchBar]; }); }