summaryrefslogtreecommitdiff
path: root/UICaboodle
diff options
context:
space:
mode:
authorGrant Paul <chpwn@chpwn.com>2011-02-11 23:27:43 -0800
committerGrant Paul <chpwn@chpwn.com>2011-02-11 23:27:43 -0800
commit35f0a3b5de5a22872f7fbd96183f510a5ad80aa0 (patch)
tree0de40ea9ad9f05a88e29ae905856016dfb31786b /UICaboodle
parent32102f847292d56cf80f125eaea743f246c048a7 (diff)
parent36fa2ea5375250c9059b83ecd7bd05af56730fa9 (diff)
Move -init into -loadView -viewDidLoad and friends, as Apple wants. Add -navigationURL and persistance (15 minute timeout) of Cydia sessions, with full lazy-loading of view controllers. Still failed to fix the URL->blackscreen bug, although now it just shows the wrong tab instaed of a black screen (really, WTF, UITabBarController?)
Diffstat (limited to 'UICaboodle')
-rw-r--r--UICaboodle/RVPage.h23
-rw-r--r--UICaboodle/RVPage.mm43
2 files changed, 65 insertions, 1 deletions
diff --git a/UICaboodle/RVPage.h b/UICaboodle/RVPage.h
index 1f39428..5d1346e 100644
--- a/UICaboodle/RVPage.h
+++ b/UICaboodle/RVPage.h
@@ -2,10 +2,31 @@
#import <UIKit/UIKit.h>
+@interface UIViewController (Cydia)
+- (BOOL) hasLoaded;
+@end
+
@interface CYViewController : UIViewController {
id delegate_;
+ BOOL loaded_;
}
-- (void)setDelegate:(id)delegate;
+
+// The default implementation of this method is essentially a no-op,
+// but calling the superclass implementation is *required*.
- (void) reloadData;
+// This URL is used to save the state of the view controller. Return
+// nil if you cannot or should not save the URL for this page.
+- (NSURL *)navigationURL;
+// By default, this delegate is unused. However, it's provided here in case
+// you need some kind of delegate in a subclass.
+- (void) setDelegate:(id)delegate;
+- (id)delegate;
+// Override this in subclasses if you manage the "has seen first load" state yourself.
+- (BOOL) hasLoaded;
+// This is called when the view managed by the view controller is released.
+// That is not always when the controller itself is released: it also can
+// happen when more memory is needed by the system or whenever the controller
+// just happens not to be visible.
+- (void) releaseSubviews;
@end
diff --git a/UICaboodle/RVPage.mm b/UICaboodle/RVPage.mm
index 3e6e692..05a1e25 100644
--- a/UICaboodle/RVPage.mm
+++ b/UICaboodle/RVPage.mm
@@ -7,13 +7,56 @@
extern bool IsWildcat_;
+@implementation UIViewController (Cydia)
+
+- (BOOL) hasLoaded {
+ return YES;
+}
+
+@end
+
@implementation CYViewController
+
- (void) setDelegate:(id)delegate {
delegate_ = delegate;
}
+
+- (id) delegate {
+ return delegate_;
+}
+
+- (void) viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+
+ if (![self hasLoaded])
+ [self reloadData];
+}
+
+- (BOOL) hasLoaded {
+ return loaded_;
+}
+
+- (void) releaseSubviews {
+ // Do nothing.
+}
+
+- (void) setView:(UIView *)view {
+ if (view == nil)
+ [self releaseSubviews];
+
+ [super setView:view];
+}
+
- (void) reloadData {
+ loaded_ = YES;
+}
+
+- (NSURL *) navigationURL {
+ return nil;
}
+
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
return IsWildcat_ || orientation == UIInterfaceOrientationPortrait;
}
+
@end