Вы можете использовать метод Swizzling и предоставить собственную реализацию.
@implementaion UIApplication (MyStuff)
- (BOOL)_my_sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event
{
// do your stuff here
// ...
// call original selector
[self _orig_sendAction:action to:target from:sender forEvent:event];
}
@end
BOOL DTRenameSelector(Class _class, SEL _oldSelector, SEL _newSelector)
{
Method method = nil;
// First, look for the methods
method = class_getInstanceMethod(_class, _oldSelector);
if (method == nil)
return NO;
method->method_name = _newSelector;
return YES;
}
Вам просто нужно поменять местами два селектора при запуске приложения:
Class UIApplicationCls = objc_getClass("UIApplication");
DTRenameSelector(UIApplicationCls, @selector(sendAction:to:from:forEvent:), @selector(_orig_sendAction:to:from:forEvent:);
DTRenameSelector(UIApplicationCls, @selector(_my_sendAction:to:from:forEvent:), @selector(sendAction:to:from:forEvent:);