]> git.saurik.com Git - cydia.git/commitdiff
Work around stupid 2.x UINavigationController behavior.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 21 Mar 2011 10:35:20 +0000 (03:35 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 21 Mar 2011 10:35:49 +0000 (03:35 -0700)
MobileCydia.mm
iPhonePrivate.h

index 41cc4e78663156fb88da92b7fc45ec6c06cc523d..dd7b14ac802068eec677b94e9aaf807e6126e4ff 100644 (file)
@@ -6747,6 +6747,20 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 
 @implementation CYTabBarController
 
+- (void) didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+
+    // presenting a UINavigationController on 2.x does not update its transitionView
+    // it thereby will not allow its topViewController to be unloaded by memory pressure
+    if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iPhoneOS_3_0) {
+        UIViewController *selected([self selectedViewController]);
+        for (UINavigationController *controller in [self viewControllers])
+            if (controller != selected)
+                if (UIViewController *top = [controller topViewController])
+                    [top unloadView];
+    }
+}
+
 - (void) setUnselectedViewController:(UIViewController *)transient {
     if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iPhoneOS_3_0) {
         if (transient != nil) {
@@ -6786,6 +6800,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 - (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
     if ([self unselectedViewController])
         [self setUnselectedViewController:nil];
+
+    // presenting a UINavigationController on 2.x does not update its transitionView
+    // if this view was unloaded, the tranitionView may currently be presenting nothing
+    if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iPhoneOS_3_0) {
+        UINavigationController *navigation((UINavigationController *) viewController);
+        [navigation pushViewController:[[[UIViewController alloc] init] autorelease] animated:NO];
+        [navigation popViewControllerAnimated:NO];
+    }
 }
 
 - (NSArray *) navigationURLCollection {
index 788c3c51adabf2383f273f8d15b7f943c0551e9e..8cc997a151a9f530a392b0d3b7608d3646588112 100644 (file)
@@ -296,6 +296,7 @@ typedef enum {
 
 @interface UIViewController (Apple)
 - (void) _updateLayoutForStatusBarAndInterfaceOrientation;
+- (void) unloadView;
 @end
 
 @interface UIWindow (Apple)