9

私は調査して調査しましたが、shouldStartLoadWithRequest が呼び出されない理由をまだ理解していません。ページが正常に読み込まれ、UIWebview デリゲート プロトコル メソッドの一部が呼び出されます。以下のコードから関連するスニペットを見つけてください。

.m (ヘッダー ファイルで定義) で webview を合成します。

@implementation PortViewController

@synthesize WebView = myWebView;

私は自分のウェブビューを正常にロードします:

    myURLString = [NSString stringWithFormat:@"https://%@", defaultWebsite];

    myURL = [NSURL URLWithString: myURLString];
    NSURLRequest *myRequest = [NSURLRequest requestWithURL:myURL];
    [myWebView loadRequest:myRequest];

デリゲートを自分自身に設定する

- (void)viewDidLoad
{


[super viewDidLoad];
[myWebView setOpaque:NO];
[myWebView setBackgroundColor:[UIColor clearColor]];

//myWebView.description.

myWebView.delegate = self;
}

私のプロトコルメソッドはすべて EXCEPT shouldStartLoadWithRequest と呼ばれます

- (void)webViewDidStartLoad:(UIWebView *)myWebView {
    [activityIndicator startAnimating];
}

- (void)webViewDidFinishLoad:(UIWebView *)myWebView {
    [activityIndicator stopAnimating];
}

- (BOOL)WebView:(UIWebView *)myWebView shouldStartLoadWithRequest:(NSURLRequest *)request          navigationType:(UIWebViewNavigationType)navigationType {

NSLog(@"inside Webview");
if([[request.URL absoluteString] hasPrefix:@"http://www.nzx"]) {
    // do stuff
    NSLog(@"Have caught the prefix");
    return YES;
}

    return NO;
}

前もって感謝します。

4

2 に答える 2

14

ViewDidLoad の代わりに ViewWillAppear でデリゲートを設定してみてください

-(void)viewWillAppear:(BOOL)animated
{
     myWebView.delegate = self;
}

PortViewController.m ファイルのインターフェイスに webview デリゲートを含めます。

@interface PortViewController ()<UIWebViewDelegate>


@end

それはうまくいくはずです。

于 2013-08-27T08:57:20.390 に答える
1

デリゲート メソッドは次のようにする必要があります。

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

そして、あなたがUIWebViewxibにいる場合、おそらくUIWebViewnilのときにリクエストをロードしようとしています

したがって、myWebView インスタンスが存在することを確認してください。

于 2013-08-27T08:39:39.787 に答える