テキストビューがあり、いくつかのリンクが含まれています。リンクをクリックすると、デフォルトの iOS ブラウザーが開きます。しかし、この目的のためにカスタム Web ビューを開きたいと考えています。どうすればいいですか?
5 に答える
使用NSURLProtocol
-そこから独自のクラスを派生させ、関連するメソッドを実装します(質問がある場合は、ここに戻ってこない場合は、自明であるはずのドキュメントを確認してください)。
クラスをアプリデリゲートに登録しますdidFinishLaunchingWithOptions
。
テキストビューでリンクをクリックすると、URLを傍受して、ブラウザが起動しないようにする機会が得られます。たとえば、URLをインターセプトした後は、URLを使用して必要な処理を実行できますUIWebView
。
ボタンをクリックすると、UIWebViewで UIViewController を呼び出すことができ、次に を使用しloadRequest: method
て URL をロードできます。
デフォルトのハンドラーをオーバーライドするリンクのハンドラーを登録するようなことが可能かどうかはわかりませんが、そうでない場合、リンクを変更するのは簡単ですか? その場合は、次のようなリンクからアプリを起動できます。
myappurlscheme://
元のリンクに情報がある場合は、次のようにアプリに渡す必要があります。
myappurlscheme://http.theoriginalurl.com/somestuff
次に、アプリ内で http.theoriginalurl.com/somestuff を抽出して UIWebView に渡すことができます。
この手法は通常、アプリを起動するために使用されますが、アプリは既に実行されているため、引き続き機能し、アプリ デリゲートへの関数呼び出しが発生します。
http://mobiledevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
私は実際にオスカーが推奨することをしました。問題は、実際には各ボタンに 1 つの「リンク」しか割り当てられないことです。私は実際にあなたの問題についてもっと知りたいです。複数行の UITextView に複数の HTML リンクが表示されている、本当に大量のテキストがありますか? UITextView に入れているテキストは、静的 (変化しない) または動的 (変化する場所) ですか?
いずれの場合も、リンクを含むテキストをアプリ内のローカル HTML ファイルとして実装し、独自の UIWebView 内で開くことをお勧めします。独自の UIWebView 内でタップされたリンクはすべて、標準のブラウザーに戻るのではなく、WebView 内で開いて留まります。これは、ゲームの説明などにローカルに保存された HTML をアプリ内で使用するために、何度も行ったことです。HTML ページの背景を透明にして、背後にある他のビュー (バッキングなど) をテキストを通して表示できるようにする方法があります。後でこれを編集して、透過的な HTML バッキングを許可するために HTML ファイルに追加する必要がある行を提供します (それが必要な場合は、デフォルトの UITextView のように見えるようにするためです)。
これは、Apple が UITextView クラス リファレンスで提供する推奨事項でもあります: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextView_Class/Reference/UITextView.html