Skip to content

Instantly share code, notes, and snippets.

@cerupcat
Forked from joshhudnall/UIAlertViewCrashFix.h
Last active August 29, 2015 14:21
Show Gist options
  • Save cerupcat/dbddb6ee7d47afed26a4 to your computer and use it in GitHub Desktop.
Save cerupcat/dbddb6ee7d47afed26a4 to your computer and use it in GitHub Desktop.
//
// UIAlertViewCrashFix.h
//
// Created by Josh Hudnall on 4/28/15.
//
//
#import <Foundation/Foundation.h>
@interface UIAlertController (CrashFix)
@end
@interface UIViewController (CrashFix)
@end
//
// UIAlertViewCrashFix.m
//
// Created by Josh Hudnall on 4/28/15.
//
//
#import <objc/runtime.h>
#import "UIAlertView+CrashFix.h"
@implementation UIAlertController (CrashFix)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
Method original, swizzle;
// Swizzle
original = class_getInstanceMethod(class, @selector(shouldAutorotate));
swizzle = class_getInstanceMethod(class, @selector(jh_shouldAutorotate));
method_exchangeImplementations(original, swizzle);
// Swizzle
original = class_getInstanceMethod(class, @selector(supportedInterfaceOrientations));
swizzle = class_getInstanceMethod(class, @selector(jh_supportedInterfaceOrientations));
method_exchangeImplementations(original, swizzle);
// Swizzle
original = class_getInstanceMethod(class, @selector(preferredInterfaceOrientationForPresentation));
swizzle = class_getInstanceMethod(class, @selector(jh_preferredInterfaceOrientationForPresentation));
method_exchangeImplementations(original, swizzle);
});
}
- (BOOL)jh_shouldAutorotate {
return IS_IPAD;
}
- (NSUInteger)jh_supportedInterfaceOrientations {
return (IS_IPAD) ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationPortrait;
}
- (UIInterfaceOrientation)jh_preferredInterfaceOrientationForPresentation {
UIDevice* device = [UIDevice currentDevice];
if (device.orientation == UIInterfaceOrientationPortraitUpsideDown) {
return UIInterfaceOrientationPortraitUpsideDown;
}
return UIInterfaceOrientationPortrait;
}
@end
@implementation UIViewController (CrashFix)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
Method original, swizzle;
// Swizzle
original = class_getInstanceMethod(class, @selector(shouldAutorotate));
swizzle = class_getInstanceMethod(class, @selector(jh_shouldAutorotate));
method_exchangeImplementations(original, swizzle);
// Swizzle
original = class_getInstanceMethod(class, @selector(supportedInterfaceOrientations));
swizzle = class_getInstanceMethod(class, @selector(jh_supportedInterfaceOrientations));
method_exchangeImplementations(original, swizzle);
// Swizzle
original = class_getInstanceMethod(class, @selector(preferredInterfaceOrientationForPresentation));
swizzle = class_getInstanceMethod(class, @selector(jh_preferredInterfaceOrientationForPresentation));
method_exchangeImplementations(original, swizzle);
});
}
- (BOOL)jh_shouldAutorotate {
return IS_IPAD;
}
- (NSUInteger)jh_supportedInterfaceOrientations {
return (IS_IPAD) ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationPortrait;
}
- (UIInterfaceOrientation)jh_preferredInterfaceOrientationForPresentation {
UIDevice* device = [UIDevice currentDevice];
if (device.orientation == UIInterfaceOrientationPortraitUpsideDown) {
return UIInterfaceOrientationPortraitUpsideDown;
}
return UIInterfaceOrientationPortrait;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment