2012-03-28 21 views
0

私はこれがとても簡単な問題だと知っていますが、私はそれに苦労しており、うまく動作しません。私は特定の行が選択されたときにURLを開くためにUITableViewを取得しようとしています。 NSLogを使用するurlSelected変数が正しく設定されていて、UrlViewControllerに正しく渡されていることがわかりましたが、単にWebビューを表示していません。黒い画面のナビゲーションメニューしか表示されません。 2つのビューコントローラ間にプッシュリレーションシップを追加すると、ViewControllerは正しくロードされますが、urlSelected変数をUrlViewControllerに渡す際に問題があります。この変数を渡す適切な方法は何ですか?また、2つのViewController間に別の関係を設定する必要がありますか?ここで私は、現在持っているものです。UIWebViewがロードされていない

RootViewController.m:

#import "RootViewController.h" 
    #import "UrlViewController.h" 
    .......... 
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath 
    { 

     UrlViewController *webController = [[UrlViewController alloc] init]; 


     if(indexPath.row == 0){ 
      webController.urlAddress = @"http://www.yahoo.com"; 
      NSLog(@"urlAddress being passed is:%@", webController.urlAddress); 
      [self.navigationController pushViewController:webController animated:YES]; 

     }else if(indexPath.row == 1){ 
      webController.urlAddress = @"http://www.google.com"; 
      NSLog(@"urlAddress being passed is:%@", webController.urlAddress); 
      [self.navigationController pushViewController:webController animated:YES]; 


     }else{ 
      webController.urlAddress = @"http://www.abc.com"; 
      NSLog(@"urlAddress being passed is:%@", webController.urlAddress); 
      [self.navigationController pushViewController:webController animated:YES]; 

     }  

    } 

UrlViewController.h:

 @interface UrlViewController : UIViewController{ 
      NSString *urlAddress; 
     } 
     @property (strong) IBOutlet UIWebView *webView; 
     @property (nonatomic, retain) NSString *urlAddress; 

UrlViewController.m:

 @implementation UrlViewController 
     @synthesize webView; 
     @synthesize urlAddress; 
     ........... 
    - (void)viewWillAppear:(BOOL)animated { 
     NSURL *url = [NSURL URLWithString:urlAddress]; 
     NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
     [self.webView loadRequest:requestObj]; 
     NSLog(@"The value being receieved is:%@", urlAddress); 
    } 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view. 
    } 

私から次のような出力を受け取りますNSLogs:

2012-03-28 09:53:30.266 BeloitTurner[4278:f803] urlAddress being passed is:http://www.yahoo.com 
    2012-03-28 09:53:30.269 BeloitTurner[4278:f803] The value being receieved is:http://www.yahoo.com 

ご協力いただきありがとうございます。

+0

私はこれに答えました[ここ](http://stackoverflow.com/questions/8791517/pass-a-uiwebview-request-using-prepareforsegue/13723765#13723765)!それは静かな同じ質問です。 – Ashoor

答えて

0

RootViewControllerとUrlViewControllerの両方のビューを含むストーリーボードを使用しているようです。そのような場合、あなたはストーリーボードを使用してUrlViewControllerをインスタンス化する必要があります。

UrlViewController* webController = [self.storyboard instantiateViewControllerWithIdentifier:@"UrlViewController"]; 

使用この代わりに、あなたのtableViewでwebControllerにinit ALLOC方法の:didSelectRowAtIndexPath:メソッドを。また、これらのView Controllerの両方のビューを含むストーリーボードで、Interface BuilderのAttributesインスペクタのView ControllerセクションのIdentifierフィールドをUrlViewControllerという文字列に設定します。 UrlViewControllerのビューを記述するファイルがストーリーボード内にあるので、UrlViewControllerを初期化すると、関連するビューが見つからず、黒い画面が表示されるだけです。

また、プッシュ関係でこれを行うこともできます。 tableView:didSelectRowAtIndexPath:メソッドの代わりに、RootViewController内のセルからUrlViewControllerへのプッシュ関係(セグ)を設定するだけです。あなたのRootViewController.mファイルでは、次のメソッドを追加します。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"PassUrlToUrlViewControllerSegue"]) { 
     segue.destinationViewController.urlAddress = @"http://www.yahoo.com"; 
    } 
} 

これは仕事にプッシュセグエの識別子を設定するには、あなたが必要となります。ストーリーボードのプッシュセグを表す矢印を選択し、その識別子を文字列PassUrlToUrlViewControllerSegueに設定します。

prepareForSegue:sender:に指定されているsenderパラメータを使用すると、選択したセルと渡すURLを識別できます。

+0

それはトリックを行い、まさに私が探していたものでした。ご協力いただきありがとうございます。 – SchoolTechie

関連する問題