- 我的应用支持网站
- YouTube应用教程
- 我的主要网站(即:连接到“由Dale Dietrich创建”的标签。)
注意:我不想在我的应用程序内打开网页。我只想发送链接到Safari,然后在那里打开该链接。我已经看到许多应用程序在它们的设置页面中执行同样的操作,因此这一定是可能的。
这是我所做的:
我在头文件.h中创建了一个IBAction,如下所示:
- (IBAction)openDaleDietrichDotCom:(id)sender;
我在设置页面添加了一个UIButton,其中包含我想要链接到的文本。
我正确地将按钮连接到文件所有者中的IBAction。
然后按照以下步骤进行实现:
Objective-C
- (IBAction)openDaleDietrichDotCom:(id)sender {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.daledietrich.com"]];
}
Swift
在视图控制器中使用 IBAction,而不是在头文件中使用 IBAction。
if let link = URL(string: "https://yoursite.com") {
UIApplication.shared.open(link)
}
请注意,我们不需要转义字符串或地址,例如:
let myNormalString = "https://example.com"; let myEscapedString = myNormalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
实际上,转义可能会导致打开失败。
Swift语法:
UIApplication.sharedApplication().openURL(NSURL(string:"http://www.reddit.com/")!)
iOS 9.3及之前版本的新Swift语法
在某个新版Swift(可能是Swift 2?)中,UIApplication.sharedApplication()
现在变成了UIApplication.shared
(我猜是更好地利用计算属性)。此外,URL不再可以隐式转换为NSURL,必须使用as!
进行显式转换。
UIApplication.sharedApplication.openURL(NSURL(string:"http://www.reddit.com/") as! URL)
iOS 10.0新的Swift语法
自iOS 10.0起,openURL方法已被弃用并替换为更多功能的方法,该方法接受一个选项对象和一个异步完成处理程序。
UIApplication.shared.open(NSURL(string:"http://www.reddit.com/")! as URL)
openURL(_:)
在iOS 10.0中已被弃用,您应该在UIApplication上调用实例方法open(_:options:completionHandler:)
。 - Ryan H.if let url = NSURL(string:"http://www.reddit.com/") { UIApplication.shared.open(url) }
这种写法总是更好。你可能想在else
语句中使用assert
和错误处理来捕获拼写错误。 - philipp这里需要进行一个检查,看所要打开的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)
}
Swift 4.2
guard let url = URL(string: "some url") else {
return
}
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
canOpenURL
的URL列入白名单。我不明白为什么您不直接调用openURL:url
,如果失败了,再处理失败。canOpenURL
主要用于检测应用程序的安装情况,而不离开当前应用程序。 - Ben FlynnopenURL(_:)
在iOS 10.0中已被弃用,您应该在UIApplication上调用实例方法open(_:options:completionHandler:)
。 - Ryan H.请查看UIApplication的-openURL:
方法。它应该允许您将NSURL实例传递给系统,系统将确定要在哪个应用程序中打开它并启动该应用程序。(请记住,您可能需要首先检查-canOpenURL:
,以防URL无法由当前安装在系统上的应用程序处理 - 尽管这对于纯粹的http://
链接可能不是问题。)
openURL(_:)
已被弃用,你应该在UIApplication上调用实例方法open(_:options:completionHandler:)
。 - Ryan H.如果您不确定提供的URL text
是否具有方案,请参考以下内容:
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];
text
)不会被硬编码,你需要像这样的代码。 - meaning-matters非废弃的Objective-C版本是:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil];
Swift 3带有一个“完成”按钮的解决方案
不要忘记import SafariServices
if let url = URL(string: "http://www.yoururl.com/") {
let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
present(vc, animated: true)
}
Swift 3.0
->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 的设备
因为自iOS 10.0起,此答案已被弃用,更好的答案是:
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}else{
UIApplication.shared.openURL(url)
}
并且使用 Objective-C
[[UIApplication sharedApplication] openURL:@"url string" options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened url");
}
}];
Swift 5:
func open(scheme: String) {
if let url = URL(string: scheme) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:],
completionHandler: {
(success) in
print("Open \(scheme): \(success)")
})
} else {
let success = UIApplication.shared.openURL(url)
print("Open \(scheme): \(success)")
}
}
}
用法:
open(scheme: "http://www.bing.com")
参考资料: