4

私はUITableViewでiPhoneアプリケーションを構築しています。行を選択すると、特定のURLを読み込む際にUIWebViewをプッシュしたいと思います。UITableView pushViewController行の選択について

私は現在持っている:

、事前に感謝を

loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:storyLink]] 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
NSDictionary * story = [stories objectAtIndex:[indexPath row]]; 
NSString * storyLink = [NSString stringWithFormat:[story objectForKey:@"link"]]; 

    [[self navigationController] pushViewController:[[FirstViewController alloc] initWithNibName:@"FirstView" bundle:[NSBundle mainBundle]] animated:YES]; 
} 

にはどうすればのUIWebViewを含み、その後経て、その中にストーリーリンクをロードすることでスライド新しいビューを取得することができます

ベンジ

答えて

9

は、一般的な考え方は、それがロードする必要がある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を直接呼び出してください。これにより、ナビゲーションスタックからポップされると、割り当て解除されます。このため

+0

素晴らしい説明 - ありがとう! –

+0

'viewDidAppear'ではなく' viewDidLoad'の間に 'loadRequest'を実行します。そうでなければ、もしあなたがページをリロードし続けるでしょう。ビューを出し入れできるタブコントローラーがあります。 –

+0

学習のために、私は上記のXCodeで見ることができるダウンロード可能なサンプルアプリケーションを入手できますか? – testndtv

0

uiwebviewを取得するには、単純にI nterface Builderを使用するか、ロードしているビューコントローラのインスタンス変数として定義します。その後、nsurlrequestを使用して動作します

0

最も良い方法は、webviewを含む新しいView Controllerクラスを作成することです。そのビューコントローラにはurlというプロパティがあり、viewDidLoadにあるときにWebビューに渡されます。

+0

ビューコントローラにURLプロパティを追加するにはどうすればよいですか? –

+0

[Objective-C 2.0プログラミング言語](http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html)をお読みください。 –

1

まず、あなたのプロジェクトに「FirstView」という名前のペンがありますか?

2番目の方法は、通常、ViewControllerをインスタンス化してパラメータを渡してからnavスタックにプッシュすることです。他の人が言ったように

UIViewController *myViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:[NSBundle mainBundle]]; 
myViewController.story = storyLink; 
[[self navigationController] pushViewController:myViewController animated:YES]; 
+0

ええ、FirstViewペン先があります。あなたの例は、構造物や組合ではなく、メンバーの物語のために私を投げてエラーを出しています。したがってそれが好きではないと想像してください。\t myViewController.story = storyLink; –

0

あなたはその後、FirstViewController

object.urllink = storyUrlのオブジェクトを作って、URLのリンクを送信FirstViewControllerでIBOutletのWebViewのを作ることができます。

このリンクはUIWebViewで開くことができます.....

関連する問題