如何从iOS应用程序启动safari和打开URL

时间:2012-09-14 00:01:32

标签: ios url mobile-safari

在设置页面上,我想要包含三个指向

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

我搜索了这个网站以及网络和我的文档,但我发现没有什么是显而易见的。

注意:我不想在我的应用中打开网页,我只想将链接发送到Safari并在那里打开该链接。我已经看到许多应用在其“设置”页面中执行相同操作,因此必须可以。

15 个答案:

答案 0 :(得分:373)

继承人的所作所为:

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

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

  3. 我正确地将按钮连接到文件所有者的IBAction。

  4. 然后实施以下内容:

  5. 对象C

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

    Swift

    (viewController中的IBAction,而不是头文件)

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

答案 1 :(得分:161)

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语法

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

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

答案 2 :(得分:47)

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

<强>目标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)
}

答案 3 :(得分:20)

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

答案 4 :(得分:17)

并且,如果您不确定提供的网址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];

答案 5 :(得分:13)

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

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

答案 6 :(得分:8)

Swift 3.0

subviews

这也支持运行旧版iOS的设备

答案 7 :(得分:6)

Swift 3 使用完成按钮的解决方案

别忘了import SafariServices

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

答案 8 :(得分: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");
        }
    }];

答案 9 :(得分:3)

在iOS 10.0中不推荐使用

openURL(:) ,而应在UIApplication上使用以下实例方法:打开( :选择: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

答案 10 :(得分:2)

在SWIFT 3.0中

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

答案 11 :(得分:2)

快捷键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")

参考:

OpenURL in iOS10

答案 12 :(得分:1)

试试这个:

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

答案 13 :(得分:0)

在Swift 1.2中,试试这个:

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

答案 14 :(得分:-2)

Swift 4解决方案:

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