首页 文章

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

提问于
浏览
194

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

  • 我的应用支持网站

  • YouTube应用教程

  • 我的主要网站(即:链接到'Created by Dale Dietrich'标签 . )

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

NOTE: 我没有看到许多应用程序在其“设置”页面中执行相同的操作,因此必须这样做 .

13 回答

  • 20

    继承人我做了什么:

    • 我在 Headers .h文件中创建了一个IBAction,如下所示:
    - (IBAction)openDaleDietrichDotCom:(id)sender;
    
    • 我在“设置”页面上添加了一个UIButton,其中包含我要链接到的文本 .

    • 我将按钮连接到文件所有者中的IBAction .

    • 然后执行以下操作:

    Obj 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) 
    }
    
  • 11

    Swift Syntax:

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

    New Swift Syntax for iOS 9.3 and earlier

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

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

    New Swift Syntax as of iOS 10.0

    openURL方法已被弃用,并替换为更通用的方法,该方法从iOS 10.0开始采用选项对象和异步完成处理程序

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

    这里需要检查一下,打开的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)
    }
    
  • 161

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

  • 1

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

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

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

    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的设备

  • 2

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

    别忘了 import SafariServices

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

    In SWIFT 3.0

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

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

    Example using 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

  • 0

    试试这个:

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

    在Swift 1.2中,试试这个:

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

    Swift 4解决方案:

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

相关问题