我已实施了三项3D触控操作,我们可以将其命名为app.touch1
,app.touch2
和app.touch3
。
这是我的AppDelegate
文件中的代码:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
if(shortcutItem.type == "app.touch1"){
MyVariables.url = "https://google.de/";
} else if(shortcutItem.type == "app.touch2") {
MyVariables.url = "https://yahoo.de/";
} else if(shortcutItem.type == "app.touch3") {
MyVariables.url = "https://bing.de/";
}
}
这是我现在的MyVariables
课程:
struct MyVariables {
static var url = "https://test.de/"
}
这是我ViewController
班的代码:
IBOutlet var containerView : UIView?
var webView: UIWebView?
var loadedURL: String?
override func prefersStatusBarHidden() -> Bool {
return true
}
override func loadView() {
super.loadView()
self.webView = UIWebView()
self.view = self.webView!
}
override func viewDidLoad() {
super.viewDidLoad()
load()
}
func load() {
let requestURL = NSURL(string: MyVariables.url)
let request = NSURLRequest(URL: requestURL!)
self.webView!.loadRequest(request)
loadedURL = MyVariables.url
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
但是,它始终会加载默认网址(https://test.de/
),即使应用之前已关闭。我也尝试了viewDidAppear
和viewWillAppear
等活动,但这不起作用。
我认为这对于iOS开发人员来说非常简单 - 我试图从iOS开始并遇到这个问题: - (
答案 0 :(得分:2)
所以看起来这只是你的结构的问题吗?
我会尝试在AppDelegate中设置一个全局变量,然后在ViewController中使用它。
例如:
在 AppDelegate 中创建一个url变量。
在 ViewController 中使用:
func load() {
let delegate = UIApplication.sharedApplication().delegate as AppDelegate
let requestURL = NSURL(string: delegate.url)
let request = NSURLRequest(URL: requestURL!)
self.webView!.loadRequest(request)
loadedURL = MyVariables.url
}
尝试一下,它应该有效。另一个想法是将它存储为Singleton,请在此处查看:
https://github.com/hpique/SwiftSingleton
或(这取决于您要归档的数据) - >将其存储为NSUserDefaults()
答案 1 :(得分:0)
我们的应用程序中有一些几乎完全相同的内容,您可以查看the commit that created it。
主要部分是:
1)在AppDelegate中,检测选择了哪个快捷项目
2)使用正确的参数
创建并打开一个新的ViewController Cf our function quickActionOpenHomePageForURL
func quickActionOpenHomePageForURL (stringURL:String) {
if (navigationVC != nil) {
if (navigationVC?.viewControllers.count > 0) {
navigationVC?.popToRootViewControllerAnimated(false)
let homepage = navigationVC?.viewControllers.last?.storyboard?.instantiateViewControllerWithIdentifier("HomePageViewController")
(homepage as! HomePageViewController).serverURL = stringURL
navigationVC?.pushViewController(homepage! as UIViewController, animated: false)
}
}
}
答案 2 :(得分:0)
根据IanW所说
问题是之前正在加载ViewController类 App Delegate已完成启动(因为它是根视图 控制器),所以设置URL的代码没有被调用 指出你提出要求。
您需要做的是make performActionForShortcutItem start ViewController上的请求,或者找到另一种触发方式 代码。
此performActionForShortcutItem
先执行,然后执行UIAppDelegate
类!
有很多方法可以更改网址
1)使用NSNotificationCenter
2)获取公共变量并更改URL
3)拿Bool,然后你可以在ViewController
中查看,并根据你可以分配' URL'
示例:强>
首先,在UIAppDelegate
类中使用一个公共变量,如下所示:
public var urlToLoad: String?
其次,在获得以下方法后,指定要加载的URL!
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
if(shortcutItem.type == "app.touch1"){
urlToLoad = "https://google.de/";
} else if(shortcutItem.type == "app.touch2") {
urlToLoad = "https://yahoo.de/";
} else if(shortcutItem.type == "app.touch3") {
urlToLoad = "https://bing.de/";
}
}
这就是它,现在您可以在任何UIViewController
类中访问此变量
func load() {
let requestURL = NSURL(string: MyVariables.url)
let request = NSURLRequest(URL: requestURL!)
self.webView!.loadRequest(request)
loadedURL = urlToLoad
}