Add a category to UIResponder:
Get the current first responder without using a private API
static __weak id currentFirstResponder;
@implementation UIResponder (FirstResponder)
+(id)currentFirstResponder {
    currentFirstResponder = nil;
    [[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:) to:nil from:nil forEvent:nil];
    return currentFirstResponder;
}
-(void)findFirstResponder:(id)sender {
    currentFirstResponder = self;
}
+(void)hideKeyboard {
    id firstResponder = [UIResponder currentFirstResponder];
    if([firstResponder respondsToSelector:@selector(endEditing:)]) {
        [firstResponder endEditing:YES];
    }
}
@end
Import the category and do below in your action to hide keyboard:
if([[UIResponder currentFirstResponder] respondsToSelector:@selector(endEditing:)]) {
    [[UIResponder currentFirstResponder] endEditing:YES];
} 
By this solution, you do not need to know the view currently viewing. Just get the current first responder and call endEdition:. For when editable view become editing, it will become first responder.
EDIT:
With Vyachaslav Gerchicov's suggestion, I add hideKeyboard method in the category. And just call [UIResponder hideKeyboard];.