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

Dal*_*ich 210 url mobile-safari ios

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

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

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

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

Dal*_*ich 379

继承人我做了什么:

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

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

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

  4. 然后执行以下操作:

对象C.

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

迅速

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

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

  • 我觉得如果有人为了使他们的手机成为他们的默认浏览器而越狱,那么尊重这种设置可能是理想的行为. (207认同)
  • 但这不是100%,因为如果有人使用越狱的iOS并使用Chrome或其他东西作为默认浏览器,那么这将打开,而不是Safari (8认同)
  • 现在不建议使用上述方法,请使用以下方法。[[UIApplication sharedApplication] openURL:[NSURL URLWithString:self.advertisement.url]选项:@ {} completeHandler:^(BOOL成功){}]; (3认同)

Dus*_*ams 164

Swift语法:

UIApplication.sharedApplication().openURL(NSURL(string:"http://www.reddit.com/")!)
Run Code Online (Sandbox Code Playgroud)

适用于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)
Run Code Online (Sandbox Code Playgroud)

从iOS 10.0开始的新Swift语法

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

UIApplication.shared.open(NSURL(string:"http://www.reddit.com/")! as URL)
Run Code Online (Sandbox Code Playgroud)

  • Swift版本的答案对Swift开发人员非常有用,它是一种没有大量文档的新语言,尤其是.解决现实世界的iOS问题.在我的情况下,自动完成选择了"fileURLWithPath:"选择器,我没有意识到这就是为什么我的URL没有打开,只是通过阅读Dustin的答案,我看到我应该使用"string:"选择器.所以达斯汀应该被投票,而不是受到惩罚. (31认同)
  • @g_fred.为什么他不能包含Swift版本? (3认同)
  • 在iOS 10.0中不推荐使用`openURL(_ :)`,而应该在UIApplication上调用实例方法`open(_:options:completionHandler:)`. (2认同)
  • 您可以直接使用URL而不是NSURL,以便保存演员表. (2认同)

Che*_*ati 52

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

Objective-C的

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

Swift 2.0

let url : NSURL = NSURL(string: "some url")!
if UIApplication.sharedApplication().canOpenURL(url) {
     UIApplication.sharedApplication().openURL(url)
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 20

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


mea*_*ers 17

并且,如果您不确定提供的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];
Run Code Online (Sandbox Code Playgroud)


Ant*_*tzi 13

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)


Gre*_*g T 10

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Bah*_*r A 9

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

别忘了 import SafariServices

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


waz*_*ski 5

由于自iOS 10.0起不赞成使用此答案,因此更好的答案是:

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

是Objective-c

[[UIApplication sharedApplication] openURL:@"url string" options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened url");
        }
    }];
Run Code Online (Sandbox Code Playgroud)