我需要在我的应用中转到指定的ViewController。我在Safari中输入scheme://时可以很好地访问rootViewController,因为我编辑了我的Info.plist。我甚至发现了这个:
https://stackoverflow.com/a/10925872/1327809
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
[self.viewController presentModalViewController:controller animated:YES];
[controller release];
return YES;
}
这正是我想要解决的一个问题。我不得不使用RubyMotion(我是新手),因此甚至没有nib文件。
def application( application, handleOpenURL:url )
// desired code
end
感谢您提供任何可能的帮助,如果您需要更多信息,请与我们联系。
2012年6月14日更新
我发现handOpenURL方法已被弃用,所以现在我正在使用它的替代品。
我已经包含了我的代码,因为我不能为我的生活弄清楚为什么我会得到黑屏。我甚至从controller.rb中删除了if / else,只是让它运行初始视图控制器,无论是通过Safari还是直接点击应用程序,如果通过Safari,它仍然是黑色的。如果这应该是一个新问题,请告诉我,我将开始一个新问题。
didFinishLaunchingWithOptions和openURL都必须通过workFlowController方法,然后将我们发送到controller.rb并运行方法viewWillAppear。有一个URL确定哪个视图控制器运行。
我认为app_delegate.rb中的内容没有正确编码。我不知道新的openURL方法代码应该如何与我在下面评论的内容不同。当我运行rake设备时,有没有办法在我的控制台中查看我的日志(我使用日志并放入相关方法)?当我完全退出应用程序并尝试通过Safari返回时我还需要它才能登录,因为根据Apple Docs,“如果应用程序是由于另一个应用程序要求它打开URL资源而启动的,那么首先是UIApplication向应用程序发送一个应用程序:didFinishLaunchingWithOptions:message然后它调用此方法。“我想看看当应用程序没有运行时我的应用程序是否会发生这种情况,但是我是通过URL打开的。
非常感谢任何反馈。我再次感谢你在这一点上提供的帮助。我会继续看。
app_delegate.rb
class AppDelegate
...
def application( application, didFinishLaunchingWithOptions: launchOptions )
...
@window.rootViewController = self.workFlowController
...
true
end
def application( application, openURL: url, sourceApplication: sourceApplication, annotation: annotation )
if sourceApplication !=nil
#should I now be using this instead of from_open_url?
end
...
@window.rootViewController = self.WorkFlowController
@window.rootViewController.from_open_url = true
...
true
end
def workFlowController
@_workFlowController ||= begin
wfController = Auth::Controller.alloc.init
wfController.delegate = self
# return wf controller
wfController
end
end
...
end
controller.rb
module Auth
class Controller < BaseController
...
attr_accessor :delegate, :from_open_url
...
def viewWillAppear( animated )
super
# app loads from URL, password reset controller loads first
if (@from_open_url)
self.presentViewController(
self.urlController,
animated: false
)
else
self.presentViewController(
self.otherController,
animated: false
)
end
end
...
end
end
答案 0 :(得分:2)
我不知道您确切的应用设置,但您应该只能使用MyViewController.alloc.init
。这是一个完整的工作示例。这会加载默认图像(foo.png),但如果通过URL打开应用程序,则会显示带有不同图像的模态视图(bar.png)。
class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
@viewController = Foo.alloc.init
@window.rootViewController = @viewController
@window.rootViewController.wantsFullScreenLayout = true
@window.makeKeyAndVisible
true
end
def application(application, openURL:url, sourceApplication:sourceApp, annotation:annotation)
# Here's where you might parse the url and decide which view controller to use
controller = Bar.alloc.init
@viewController.presentModalViewController(controller, animated:true)
true
end
end
class Foo < UIViewController
def viewDidLoad
self.view = UIImageView.alloc.initWithImage(UIImage.imageNamed('foo.png'))
end
end
class Bar < UIViewController
def viewDidLoad
self.view = UIImageView.alloc.initWithImage(UIImage.imageNamed('bar.png'))
end
end