如何从iOS应用程序启动Safari和打开url
在设置页面上,我想包含三个链接
- 我的应用支持网站
- YouTube应用教程
- 我的主要网站(即:链接到“创build者Dale Dietrich”标签。)
我search了这个网站,networking和我的文档,但是我没有发现任何明显的东西。
注:我不想在我的应用程序内打开网页,我只是想发送链接到Safari,并在那里打开链接。 我已经看到许多应用程序在设置页面中做同样的事情,所以它必须是可能的。
下面我做了什么:
-
我在头文件.h文件中创build了一个IBAction,如下所示:
- (IBAction)openDaleDietrichDotCom:(id)sender;
-
我在包含我想要链接到的文本的设置页面上添加了一个UIButton。
-
我把这个button连接到文件所有者的IBAction中。
-
然后执行以下操作:
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)