如何从iOS应用程序启动Safari和打开url

在设置页面上,我想包含三个链接

  • 我的应用支持网站
  • YouTube应用教程
  • 我的主要网站(即:链接到“创build者Dale Dietrich”标签。)

我search了这个网站,networking和我的文档,但是我没有发现任何明显的东西。

注:我不想在我的应用程序内打开网页,我只是想发送链接到Safari,并在那里打开链接。 我已经看到许多应用程序在设置页面中做同样的事情,所以它必须是可能的。

下面我做了什么:

  1. 我在头文件.h文件中创build了一个IBAction,如下所示:

    - (IBAction)openDaleDietrichDotCom:(id)sender; 
  2. 我在包含我想要链接到的文本的设置页面上添加了一个UIButton。

  3. 我把这个button连接到文件所有者的IBAction中。

  4. 然后执行以下操作:

Obj C

  - (IBAction)openDaleDietrichDotCom:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.daledietrich.com"]]; } 

迅速

(在viewController IBAction,而不是头文件)

 if let link = URL(string: "https://yoursite.com") { UIApplication.shared.open(url) } 

Swift语法:

 UIApplication.sharedApplication().openURL(NSURL(string:"http://www.reddit.com/")!) 

适用于iOS 9.3及更早版本的新Swift语法

至于一些新版本的Swift(可能是swift 2?),UIApplication.sharedApplication()现在是UIApplication.shared(更好地使用我猜测的计算属性)。 此外,URL不再可以隐式转换为NSURL,必须显式转换为!

 UIApplication.sharedApplication.openURL(NSURL(string:"http://www.reddit.com/") as! URL) 

从iOS 10.0开始的新的Swift语法

openURL方法已被弃用,取而代之的是一个更通用的方法,从iOS 10.0开始取得一个选项对象和一个asynchronous完成处理程序

 UIApplication.shared.open(NSURL(string:"http://www.reddit.com/") as! URL, options: [:], completionHandler: nil) 

这里需要检查一下打开的url是否可以通过设备或模拟器打开。 因为有些时候(大多数在模拟器)我发现它导致崩溃。

Objective-C的

 NSURL *url = [NSURL URLWithString:@"some url"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } 

Swift 2.0

 let url : NSURL = NSURL(string: "some url")! if UIApplication.sharedApplication().canOpenURL(url) { UIApplication.sharedApplication().openURL(url) } 

看看UIApplication上的-openURL:方法。 它应该允许你将一个NSURL实例传递给系统,这将决定打开它的应用程序并启动该应用程序。 (请记住,您可能需要检查-canOpenURL:首先,以防万一目前安装在系统上的应用程序无法处理URL – 虽然这对于普通http://链接可能不是问题。

而且,如果您不确定提供的URL text是否有一个scheme:

 NSString* text = @"www.apple.com"; NSURL* url = [[NSURL alloc] initWithString:text]; if (url.scheme.length == 0) { text = [@"http://" stringByAppendingString:text]; url = [[NSURL alloc] initWithString:text]; } [[UIApplication sharedApplication] openURL:url]; 

非弃用的Objective-C版本将是:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil]; 

Swift 3.0

 if let url = URL(string: "https://www.reddit.com") { if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:]) } else { UIApplication.shared.openURL(url) } } 

这也支持运行老版本iOS的设备

openURL( 🙂在iOS 10.0中已被弃用,而应在UIApplication上使用以下实例方法: open(:options:completionHandler 🙂

使用Swift的例子
这将在Safari中打开“ https://apple.com ”。

 if let url = URL(string: "https://apple.com") { if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } } 

https://developer.apple.com/reference/uikit/uiapplication/1648685-open

在SWIFT 3.0中

  if let url = URL(string: "https://www.google.com") { UIApplication.shared.open(url, options: [:]) } 

具有完成button的Swift 3解决scheme

不要忘记import SafariServices

 if let url = URL(string: "http://www.yoururl.com/") { let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true) present(vc, animated: true) } 

尝试这个:

 NSString *URL = @"xyz.com"; if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:URL]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]]; } 

在Swift 1.2中,试试这个:

 let pth = "http://www.google.com" if let url = NSURL(string: pth){ UIApplication.sharedApplication().openURL(url) 

Swift 4解决scheme:

 UIApplication.shared.open(NSURL(string:"http://yo.lo")! as URL, options: [String : Any](), completionHandler: nil)