223

設定ページに、への3つのリンクを含めたい

  • 私のアプリサポートサイト
  • YouTubeアプリのチュートリアル
  • 私のプライマリサイト(つまり、「Created by DaleDietrich」ラベルにリンクされています。)

このサイト、Web、およびドキュメントを検索しましたが、明らかなものは何も見つかりませんでした。

注:アプリ内でウェブページを開きたくありません。リンクを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

textまた、提供された URLにスキームがあるかどうかわからない場合は、次のようにします。

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 に答える
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 に答える
3

openURL( :)は iOS 10.0 で廃止されました。代わりに、UIApplication で次のインスタンス メソッドを使用する必要があります: open( :options:completionHandler:)

Swiftを使った例これで「 https://apple.com」がSafariで
開きます。

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 に答える