私のiPhoneアプリでは、UITextViewにURLが含まれています。このURLをsafariで開くのではなく、UIWebViewで開きたいですか?私のUITextViewには、URLとともにいくつかのデータが含まれています。場合によってはありません。URLの数は複数にすることができます。
ありがとうサンディ
私のiPhoneアプリでは、UITextViewにURLが含まれています。このURLをsafariで開くのではなく、UIWebViewで開きたいですか?私のUITextViewには、URLとともにいくつかのデータが含まれています。場合によってはありません。URLの数は複数にすることができます。
ありがとうサンディ
次の手順に従うことができます。
UITextView
XibまたはStoryboardから取得した次のプロパティにチェックマークを付けます。または、動的に取得されるテキストビュー用にこれらを記述します。
textview.delegate=self;
textview.selectable=YES;
textView.dataDetectorTypes = UIDataDetectorTypeLink;
delegate
次に、以下のメソッドを記述します。-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange { NSLog(@"URL: %@", URL); //You can do anything with the URL here (like open in other web view). return NO; }
あなたはそれを探していると思います。
UITextViewには、URLを検出し、それに応じてハイパーリンクを埋め込む機能があります。次の場所でそのオプションをオンにできます。
myTextView.dataDetectorTypes = UIDataDetectorTypeLink;
次に、このURLリクエストをトラップし、アプリケーションに処理させるようにアプリを構成する必要があります。これを行うボイラープレートクラスをgithubで公開しました。これは、最も簡単なルートである可能性があります:http: //github.com/nbuggia/Browser-View-Controller--iPhone-。
最初のステップは、UIApplicationをサブクラス化して、「openUrl」リクエストで誰がアクションを実行できるかをオーバーライドできるようにすることです。そのクラスは次のようになります。
#import <UIKit/UIKit.h>
#import "MyAppDelegate.h"
@interface MyApplication : UIApplication
-(BOOL)openURL:(NSURL *)url;
@end
@implementation MyApplication
-(BOOL)openURL:(NSURL *)url
{
BOOL couldWeOpenUrl = NO;
NSString* scheme = [url.scheme lowercaseString];
if([scheme compare:@"http"] == NSOrderedSame
|| [scheme compare:@"https"] == NSOrderedSame)
{
// TODO - Update the cast below with the name of your AppDelegate
couldWeOpenUrl = [(MyAppDelegate*)self.delegate openURL:url];
}
if(!couldWeOpenUrl)
{
return [super openURL:url];
}
else
{
return YES;
}
}
@end
次に、main.mを更新しMyApplication.h
て、UIApplicationクラスのbonifiedデリゲートとして指定する必要があります。main.mを開き、次の行を変更します。
int retVal = UIApplicationMain(argc, argv, nil, nil);
これに
int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil);
最後に、[(MyAppDelegate *)openURL:url]メソッドを実装して、URLで好きなことを実行できるようにする必要があります。たとえば、UIWebViewを含む新しいView Controllerを開き、URLを表示します。あなたはこのようなことをすることができます:
- (BOOL)openURL:(NSURL*)url
{
BrowserViewController *bvc = [[BrowserViewController alloc] initWithUrls:url];
[self.navigationController pushViewController:bvc animated:YES];
[bvc release];
return YES;
}
うまくいけば、それはあなたのために働くはずです。
次のインスタンスがあると仮定すると、それらもUIViewに追加されます。
UITextView *textView;
UIWebView *webView;
textViewにURL文字列が含まれている場合、次のようにURLの内容をwebViewにロードできます。
NSURL *url = [NSURL URLWithString:textView.text];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[webView loadRequest:req];