具有讽刺意味的是,我在使用 facebook 时遇到了类似的问题facebook-ios-sdk
,以便将 Facebook 支持添加到我的三个 20 应用程序之一。我的控制器希望获得 Facebook url 响应,但是,无法使用标准TTNavigator
url 映射。
我必须找到一种方法来调用控制器上的 Facebook 对象来传递传入的 url。在TTNavigator
为您管理控制器堆栈时,除了控制器本身之外,您无法从其他任何地方“访问”控制器。
我最终将控制器设置为具有应用程序委托的私有参数并在TTURLMap
.
@class PhotoEditorController;
@interface PhotoBoothAppDelegate : NSObject <UIApplicationDelegate> {
PhotoEditorController* _photoEditorController;
}
@property(nonatomic, retain) PhotoEditorController* photoEditorController;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation PhotoBoothAppDelegate
@synthesize photoEditorController = _photoEditorController;
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark UIApplicationDelegate
///////////////////////////////////////////////////////////////////////////////////////////////////
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:NO];
TTNavigator* navigator = [TTNavigator navigator];
navigator.persistenceMode = TTNavigatorPersistenceModeNone;
navigator.window = [[UIWindow alloc] initWithFrame:TTScreenBounds()];
TTURLMap* map = navigator.URLMap;
_photoEditorController = [[PhotoEditorController alloc] init];
// Any URL that doesn't match will fall back on this one, and open in the web browser
[map from:@"*" toViewController:[TTWebController class]];
[map from:@"tt://photo" toViewController:_photoEditorController transition:UIViewAnimationTransitionCurlUp];
// Before opening the tab bar, we see if the controller history was persisted the last time
if (![navigator restoreViewControllers]) {
[navigator openURLAction:[TTURLAction actionWithURLPath:@"tt://intro"]];
}
return YES;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[_photoEditorController facebook] handleOpenURL:url];
}
此代码仍然使用TTNaviagtor
,但是,您仍然可以引用控制器,这意味着您可以直接访问它们的参数。
总的来说,我强烈建议避免TTNavigator
. 它的 iPad 支持几乎不存在并且被破坏。