は、一般的な考え方は、それがロードする必要があるURLを格納FirstViewControllerのプロパティを持っている、とビューが表示されたら、その後のUIWebViewにそのURLをロードすることです。
ここでは、ヘッダから始まる、どのように見えるかの例です:
実装のための今
@interface FirstViewController : UIViewController {
UIWebView *webView;
NSURL *storyURL;
}
@property (nonatomic, retain) IBOutlet UIWebView *webView; // this is set up in your nib
@property (nonatomic, retain) NSURL *storyURL;
@end
:
@implementation FirstViewController
@synthesize webView;
@synthesize storyURL;
- (void)dealloc;
{
[storyURL release]; // don't forget to release this
[super dealloc];
}
- (void)viewDidAppear:(BOOL)animated;
{
// when the view appears, create a URL request from the storyURL
// and load it into the web view
NSURLRequest *request = [NSURLRequest requestWithURL:self.storyURL];
[self.webView loadRequest:request];
}
- (void)viewWillDisappear:(BOOL)animated;
{
// there is no point in continuing with the request load
// if somebody leaves this screen before its finished
[self.webView stopLoading];
}
@end
だから今、あなたがのために、コントローラにする必要があるすべて前のビューはストーリーURLを取得し、FirstViewControllerに渡してプッシュします。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *story = [stories objectAtIndex:[indexPath row]];
NSURL *storyURL = [NSURL URLWithString:[story objectForKey:@"link"]];
FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:[NSBundle mainBundle]]; // I'm pretty sure you don't need to pass in the main bundle here
firstViewController.storyURL = storyURL;
[self.navigationController pushViewController:firstViewController animated:YES];
[firstViewController release]; // don't leak memory
}
それはそれです。他のいくつかのポイント:
私はあなたの辞書に「リンク」の値がすでに文字列であると仮定 - このような場合には、あなたの元の例では、ブランドの新しい文字列の建設が不要でした。私の例でわかるように、この文字列を直接使用してNSURL
インスタンスを作成することができます。
FirstViewControllerを割り当て/初期化するとき、元のコードでは、pushViewController
にそのまま渡します。これは一度UINavigationController
が(ナビゲーションスタックからポップされた後に)完了したときにメモリリークを引き起こします。保持カウントは1になります。少なくともautorelease
を呼び出す必要がありますが、ここで最も効率的なことは単純にalloc /それを初期化し、それを一時変数に格納してから、それを押した後にrelease
を直接呼び出してください。これにより、ナビゲーションスタックからポップされると、割り当て解除されます。このため
素晴らしい説明 - ありがとう! –
'viewDidAppear'ではなく' viewDidLoad'の間に 'loadRequest'を実行します。そうでなければ、もしあなたがページをリロードし続けるでしょう。ビューを出し入れできるタブコントローラーがあります。 –
学習のために、私は上記のXCodeで見ることができるダウンロード可能なサンプルアプリケーションを入手できますか? – testndtv