我正在努力实现以下目标: 获取我的基于cordova的应用程序打开来自其他应用程序的pdf文件,并使用该文件显示该pdf。最后,目标是将其上传到我的服务器。
我取得了以下成绩: - 应用程序显示在pdf文件的“打开方式”菜单中 - 应用程序启动,在appdelegate.m文件中,由于此代码,我得到了路径:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if (url){
NSLog(@"The file contained: %@",url);
}
return YES;
}
问题:
我知道如何在swift中做到这一点(几天前开始学习)但从未使用过objective-c。 如果您有建议,我会非常喜欢一个非常明确的答案,因为我不知道如何使用objective-c方法,并且在不久的将来不需要objective-c。
*****编辑*****
在纯粹的swift项目中,我在AppDelegate.swift文件中有以下内容:
var file_url:NSURL!
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
file_url = url
return true
}
然后在ViewController.swift声明:
func displayLaunchDetails() {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
if appDelegate.file_url != nil {
webview.loadRequest(NSURLRequest(URL: appDelegate.file_url))
}
}
稍后,在viewDidLoad()
函数中,我这样称呼它:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "displayLaunchDetails",
name: UIApplicationDidBecomeActiveNotification,
object: nil)
在这个例子中,如果文件传递到我的应用程序,我将PDF文件加载到webView中。
将其转换为objective-c是一回事(我不知道如何在.m文件中调用它),将此变量发送回javascript,这要归功于cordova是另一个...而且我被困在两者。
答案 0 :(得分:2)
这应该调用名为doSomething
的js函数,将url作为参数传递。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if (url){
NSLog(@"The file contained: %@",url);
NSString * jsString = [NSString stringWithFormat:@"doSomething('%@');",url];
[self.viewController.webViewEngine evaluateJavaScript:jsString completionHandler:nil];
}
return YES;
}