Skip to content

Instantly share code, notes, and snippets.

@joshhudnall
Created April 28, 2015 23:13
Show Gist options
  • Save joshhudnall/cdc89b61d0a545c85d1d to your computer and use it in GitHub Desktop.
Save joshhudnall/cdc89b61d0a545c85d1d to your computer and use it in GitHub Desktop.

Revisions

  1. Josh Hudnall created this gist Apr 28, 2015.
    17 changes: 17 additions & 0 deletions UIAlertViewCrashFix.h
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,17 @@
    //
    // UIAlertViewCrashFix.h
    //
    // Created by Josh Hudnall on 4/28/15.
    //
    //

    #import <Foundation/Foundation.h>

    @interface UIAlertController (CrashFix)

    @end


    @interface UIViewController (CrashFix)

    @end
    96 changes: 96 additions & 0 deletions UIAlertViewCrashFix.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,96 @@
    //
    // 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