2012-03-28 5 views
0

저는 이것이 아주 간단한 문제라는 것을 알고 있습니다. 그러나 나는 그것에 어려움을 겪어 왔으며 작동하지 않을 것입니다. 특정 행을 선택하면 UITableView URL을 열려고 해요. NSLog 사용 urlSelected 변수가 올바르게 설정되고 UrlViewController에 제대로 전달되는 것을 볼 수 있지만 단순히 웹보기를 표시하지 않습니다. 검은 화면이있는 탐색 메뉴 만 표시합니다. 두 뷰 컨트롤러간에 푸시 관계를 추가하면 ViewController가 올바르게로드되지만 urlSelected 변수를 UrlViewController에 전달하는 데 문제가 있습니다. 이 변수를 전달하는 적절한 방법은 무엇입니까? 아니면 두 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를 인스턴스화해야합니다 didSelectRowAtIndexPath : : 방법이 대신 당신이 ALLOC 방법

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

사용하여있는 tableView에 webController을 초기화하기. 또한 두 View Controller의보기가 포함 된 스토리 보드에서 Interface Builder의 Attributes 속성에있는 View Controller 섹션의 Identifier 필드를 UrlViewController 문자열로 설정하십시오. alloc init 대신이 방법을 사용하는 이유는 UrlViewController에 대한 뷰를 설명하는 파일이 스토리 보드 내부에 있으므로 UrlViewController를 초기화하는 alloc은 관련 뷰를 찾지 못하고 검은 색 화면 만 표시한다는 것을 의미합니다.

푸시 관계로도이 작업을 수행 할 수 있습니다. tableView : didSelectRowAtIndexPath : 메서드 대신 RootViewController의 셀에서 UrlViewController로 푸시 관계 (세그)를 설정하면됩니다.

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

이 푸시 SEGUE가 작동하려면 식별자를 설정해야하는 것입니다 : 당신의 RootViewController.m 파일에서 다음과 같은 방법을 추가 할 수 있습니다. 스토리 보드에서 푸시 세그를 나타내는 화살표를 선택하고 식별자를 문자열 PassUrlToUrlViewControllerSegue로 설정합니다.

prepareForSegue : sender :에서 주어진 sender 매개 변수를 사용하여 동적으로 만들 수 있습니다. 어떤 셀을 선택했는지 그리고 따라서 전달할 URL을 식별합니다.

+0

그 트릭을했고 내가 정확히 무엇을 찾고 있었는지. 귀하의 도움에 너무 감사드립니다. – SchoolTechie

관련 문제