3D触控快捷键:加载其他网址

时间:2015-11-08 11:35:52

标签: ios swift

我已实施了三项3D触控操作,我们可以将其命名为app.touch1app.touch2app.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/),即使应用之前已关闭。我也尝试了viewDidAppearviewWillAppear等活动,但这不起作用。

我认为这对于iOS开发人员来说非常简单 - 我试图从iOS开始并遇到这个问题: - (

3 个答案:

答案 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
}