223

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

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

我搜索了这个网站、网络和我的文档,但没有发现任何明显的东西。

注意:我不想在我的应用程序中打开网页。我只想将链接发送到 Safari,并且该链接在那里打开。我已经看到许多应用程序在他们的设置页面中做同样的事情,所以这一定是可能的。

4

15 回答 15

394

这是我所做的:

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

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

  3. 我将按钮适当地连接到文件所有者中的 IBAction。

  4. 然后执行以下操作:

Objective-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(link)
}

请注意,我们不需要转义字符串和/或地址,例如:

let myNormalString = "https://example.com";
let myEscapedString = myNormalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!

事实上,逃逸可能会导致打开失败。

于 2012-09-14T00:08:52.777 回答
169

斯威夫特语法:

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)
于 2015-02-13T14:22:41.803 回答
54

这里需要检查要打开的 url 是否能够被设备或模拟器打开。因为有时(模拟器中的大多数)我发现它会导致崩溃。

Objective-C

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

斯威夫特 2.0

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

斯威夫特 4.2

guard let url = URL(string: "some url") else {
    return
}
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
于 2015-10-14T10:05:52.557 回答
21

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

于 2012-09-14T00:06:25.227 回答
17

而且,如果您不确定提供的 URLtext是否有方案:

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];
于 2015-03-08T17:37:11.923 回答
16

不推荐使用的 Objective-C 版本是:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil];
于 2017-03-24T05:22:13.533 回答
10

斯威夫特 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 的设备

于 2017-05-01T04:58:55.853 回答
10

带有完成按钮的Swift 3解决方案

不要忘记import SafariServices

if let url = URL(string: "http://www.yoururl.com/") {
            let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
            present(vc, animated: true)
        }
于 2017-08-12T19:50:40.883 回答
5

由于自 iOS 10.0 起已弃用此答案,因此更好的答案是:

if #available(iOS 10.0, *) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}else{
    UIApplication.shared.openURL(url)
}

y en Objective-c

[[UIApplication sharedApplication] openURL:@"url string" options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened url");
        }
    }];
于 2019-01-27T16:48:33.400 回答
4

斯威夫特 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")

参考:

iOS10中的OpenURL

于 2020-03-31T03:30:02.043 回答
3

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

于 2016-10-24T03:24:54.987 回答
2

在 SWIFT 3.0 中

               if let url = URL(string: "https://www.google.com") {
                 UIApplication.shared.open(url, options: [:])
               }
于 2016-10-03T19:21:08.470 回答
1

尝试这个:

NSString *URL = @"xyz.com";
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:URL]])
{
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
}
于 2016-10-24T09:42:57.217 回答
0

在 Swift 1.2 中,试试这个:

let pth = "http://www.google.com"
    if let url = NSURL(string: pth){
        UIApplication.sharedApplication().openURL(url)
于 2017-04-13T12:30:28.510 回答
-2

斯威夫特 4 解决方案:

UIApplication.shared.open(NSURL(string:"http://yo.lo")! as URL, options: [String : Any](), completionHandler: nil)
于 2017-10-30T12:45:41.467 回答