1

4つのViewController(4つのタブ)を備えたアプリケーションがあり、4つ目のアプリケーションでUIWebViewを使用してURLをロードしようとしています。以下のコードを確認してください。

このFourthViewController.h

    #import <UIKit/UIKit.h>


@interface FourthViewController : UIViewController {

    IBOutlet UIWebView *webView;
}

@property(nonatomic,retain)IBOutlet UIWebView *webView;
@end

FourViewController.m

#import "FourthViewController.h"


@interface FourthViewController ()

@end

@implementation FourthViewController
@synthesize webView;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    //self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.navigationItem.title = @"Instagram";
        self.view.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIBarButtonItem *refreshButton = [[[UIBarButtonItem alloc]
                                       initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                                       target:self action:@selector(refreshClicked:)] init];
    self.navigationItem.rightBarButtonItem = refreshButton;

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
}




-(IBAction)refreshClicked:(id)sender {
    NSLog(@"Clicked");

}



- (NSString *)tabImageName
{
    return @"instagram";
}

@end

しかし、iPhoneシミュレーターを実行して4番目のタブに移動すると、Webがロードされません。問題は何ですか?

前もって感謝します

4

4 に答える 4

1

xib を使用していない場合は、alloc-init を実行してビュー階層に追加する必要があります。

したがって、viewDidLoadメソッドでは、たとえば次のようになります。

UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[webView loadRequest:request];
[self.view addSubview:webView];
[webView release]; // if you don't use ARC

次に、xib を使用しない場合は、使用する必要はありませんIBOutlet。これは、Interface Builder で作業できるようにする唯一のプレースホルダーです (つまり、アウトレットを接続します)。

編集

私が提供したコードを次のように変更する必要があります (例)。私のは単なる例でした。この警告は、.h で作成した変数の宣言がローカル変数によって隠されていることを示しているだけです。

UIWebView *web = [[UIWebView alloc] initWithFrame:self.view.bounds];
self.webView = web;
[self.webView loadRequest:request];
[self.view addSubview:self.webView];
[web release]; // if you don't use ARC
于 2013-02-24T15:19:59.630 に答える
1
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[self.webView loadRequest:request];
[self.webView addSubview:self.webview];

バーボタンのターゲットメソッドで更新する場合refreshClicked:

- (IBAction)refreshClicked:(id)sender {
    [self.webView loadRequest:request];    
}
于 2013-02-24T17:56:59.680 に答える
0

おそらく、スーパー init を呼び出さないためです。なぜこの行をコメントアウトしたのですか:

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

編集 - また、「self」を使用する必要があります。その webView var の前に、設定したプロパティを介して参照します。あなたのバグではなく、良い習慣です。

[self.webView loadRequest:request];

Webview IBOutlet をこのクラスに接続しなかった場合、他のレスポンダーは正しいです。そうするとwebViewがうまくいかないので、必ず確認してください。

編集 2: インターフェイス ビルダーを使用していない場合は、オブジェクトを作成してビューに追加する必要があります。

self.webview = [[UIWebView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.webview]

この画面の他のビュー/コントロールについても同様です。注: IBOUTLET は単なる #define であり、何にもなりません。これは、インターフェイス ビルダーがアウトレットとして使用したいプロパティを認識できるようにするためです。

于 2013-02-24T15:03:50.617 に答える
0

コード内の IBOutlet を Interface .xib ドキュメントに接続しましたか?

わからない場合は、このチュートリアルを参照してください。

于 2013-02-24T15:04:18.757 に答える