Make button open link - Swift

IosXcodeSwift

Ios Problem Overview


This is the code I have now, taken from an answer to a similar question.

@IBAction func GoogleButton(sender: AnyObject) {
    if let url = NSURL(string: "www.google.com"){
        UIApplication.sharedApplication().openURL(url)
    }
}

The button is called Google Button and its text is www.google.com

How do I make it open the link when I press it?

Ios Solutions


Solution 1 - Ios

What your code shows is the action that would occur once the button is tapped, rather than the actual button. You need to connect your button to that action.

(I've renamed the action because GoogleButton is not a good name for an action)

In code:

override func  viewDidLoad() {
  super.viewDidLoad()
  
  googleButton.addTarget(self, action: "didTapGoogle", forControlEvents: .TouchUpInside)
}

@IBAction func didTapGoogle(sender: AnyObject) {
  UIApplication.sharedApplication().openURL(NSURL(string: "http://www.google.com")!)
}

In IB:

enter image description here

Edit: in Swift 3, the code for opening a link in safari has changed. Use UIApplication.shared().openURL(URL(string: "http://www.stackoverflow.com")!) instead.

Edit: in Swift 4 UIApplication.shared.openURL(URL(string: "http://www.stackoverflow.com")!)

Solution 2 - Ios

The string you are supplying for the NSURL does not include the protocol information. openURL uses the protocol to decide which app to open the URL.

Adding "http://" to your string will allow iOS to open Safari.

@IBAction func GoogleButton(sender: AnyObject) {
    if let url = NSURL(string: "http://www.google.com"){
        UIApplication.sharedApplication().openURL(url)
    }
}

Solution 3 - Ios

  if let url = URL(string: "your URL") {
        if #available(iOS 10, *){
            UIApplication.shared.open(url)
        }else{
            UIApplication.shared.openURL(url)
        }
        
    }

Solution 4 - Ios

as openUrl method is deprecated in iOS 10, here is solution for iOS 10

let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)

Solution 5 - Ios

if iOS 9 or higher it's better to use SafariServices, so your user will not leave your app.

import SafariServices

let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)

Solution 6 - Ios

In Swift 4

if let url = URL(string: "http://yourURL") {
            UIApplication.shared.open(url, options: [:])
        }

Solution 7 - Ios

For Swift 3.0:

    if let url = URL(string: strURlToOpen) {
        UIApplication.shared.openURL(url)
    }

Solution 8 - Ios

This code works with Xcode 11

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

Solution 9 - Ios

The code that you have should open the link just fine. I believe, that you probably just copy-pasted this code fragment into your code. The problem is that the UI component (button) in the interface (in storyboard, most likely) is not connected to the code. So the system doesn't know, that when you press the button, it should call this code.

In order to explain this fact to the system, open the storyboard file, where your Google Button is located, then in assistant editor open the file, where your func GoogleButton code fragment is located. Right-click on the button, and drag the line to the code fragment.

If you create this button programmatically, you should add target for some event, for instance, UITouchUpInside. There are plenty of examples on the web, so it shouldn't be a problem :)

UPDATE: As others noted already, you should also add a protocol to the link ("http://" or "https://"). It will do nothing otherwise.

Solution 10 - Ios

For Swift3 , below code is working fine

@IBAction func Button(_ sender: Any) { 
   UIApplication.shared.open(urlStore1, options: [:], completionHandler: nil)     
 }

Solution 11 - Ios

Actually You Can Use It Like This In Your Action Button Works For Swift 5 :


    guard let settingsUrl = URL(string:"https://yourLink.com") else {
        return
    }
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)
}

Solution 12 - Ios

// How to open a URL in Safari

import SafariServices \ import

@IBAction func google(_ sender: Any)

{

if let url = URL(string: "https://www.google.com";) {

let safariVC = SFSafariViewController(url: url) present(safariVC, animated: true, completion: nil)

}

}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThevView Question on Stackoverflow
Solution 1 - IosPaul.sView Answer on Stackoverflow
Solution 2 - IosFruity GeekView Answer on Stackoverflow
Solution 3 - IosSuresh ManoView Answer on Stackoverflow
Solution 4 - IosKrishna Kumar ThakurView Answer on Stackoverflow
Solution 5 - IosAdam SmakaView Answer on Stackoverflow
Solution 6 - Iososcar castellonView Answer on Stackoverflow
Solution 7 - IosS YoshidaView Answer on Stackoverflow
Solution 8 - IosLisaView Answer on Stackoverflow
Solution 9 - IosFreeNicknameView Answer on Stackoverflow
Solution 10 - IosGuri SView Answer on Stackoverflow
Solution 11 - Iosabdallah eslahView Answer on Stackoverflow
Solution 12 - IosPRAVEEN BHATIView Answer on Stackoverflow