2011-02-24 7 views
2

저는 C++ 및 Perl 배경에서 온 것부터이 기능을 처음 사용합니다. 책에서 배우려고하지만 Objective-C의 핵심 개념이 빠져 있습니다. 나는 웹 페이지 끌어 코드에 약간의 도움이 필요합니다 :iPad iPhone : View View Controller에서 Webview 호출

RootViewController.m을

- (void)fetchWebsite:(NSString*)website{ 
    NSLog(@"address: %@", website); 

    NSString *urlAddress = website; 
    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [webImageDisplay loadRequest:requestObj]; 
    [webImageDisplay release]; 
} 

- (void)viewDidLoad { 
    [self fetchWebsite:@"website here"]; 
    [super viewDidLoad]; 
} 

이 코드는 잘 작동하지만 나는이 문제에 봉착하는 등, 다른 클래스에서이 메서드를 호출입니다 코드 아래 :

내가 제대로이 같은 2 차 뷰 컨트롤러에서 상세 뷰 컨트롤러 전화 해요 :

SubViewController.m을

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here. Create and push another view controller. 
    switch (indexPath.row) { 
     case 0: { 
      AnotherViewController *cViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil]; 
      cController.contentSizeForViewInPopover = CGSizeMake(320, 350); 
      [self.navigationController pushViewController:cViewController animated:YES]; 
      [cViewController release]; 
      break; 
     } 
     case 1: { 
      break; 
     } 
    } 
} 

그런 다음 웹보기에 표시하려는 새 웹 페이지에 대한 링크가있는 세 번째보기 컨트롤러가 있습니다. RootViewController에서 함수에 액세스하기 위해 여기에서 메서드를 호출하면 응답하지 않는 것 같습니다.

AnotherViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSString *itemRequested = [conusItems objectAtIndex:indexPath.row]; 
    NSLog(@"logging: %@", itemRequested); 

    RootViewController *parent = [[RootViewController alloc] init]; 
    [parent fetchWebsite:@"another website here"]; 

    [itemRequested release]; 

} 

나는 테이블 뷰에있는 버튼을 클릭 나는 코드가 NSLog와 RootViewController에서 호출되고 있는지 볼 수 있지만이 새로운 페이지를 표시하지 않는 것 . 오류나 경고 없음, 어떤 아이디어? 감사합니다

답변

1

내가보기에, 당신은 인생이 더 쉬울 것이고 자신의보기 컨트롤러 인 것처럼 웹보기를 돌리면 응용 프로그램이 더 유연해질 것입니다. (. 그리고 당신이 제대로 초기화되지 않을 수 있습니다)

진짜 문제는 당신이 당신의 웹 뷰 컨트롤러로 이동하지 않는 것입니다

기회는 코드가 더 같이 표시됩니다 있습니다

MyWebViewController *webVC = [[MyWebViewController alloc] initWithNibName:@"MyWebViewContorller" bundle:nil]; 
webVC.address = @"whatever"; 
[self.navigationController pushViewController:webVC animated:YES]; 
[webVC release]; 
0

여기에 주목할 가치가있는 몇 가지가 있습니다.

  • didSelectRowAtIndexPath에서보기 컨트롤러를 만들고 있지만 표시하지 않으므로 부작용이 보이지 않습니다. 테이블보기에서 "세부 사항"뷰 컨트롤러를 제공하기 위해 수행 전형적인 것은 이것이다 :

MenuItemOrderVC *vc = [[MenuItemOrderVC alloc] initWithNibName:@"MenuItemOrderVC" bundle:nil]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

이 뷰 컨트롤러 클래스의 새 인스턴스를 생성하고,에 밀어을 제공합니다 네비게이션 컨트롤러의 스택 이것이 세부적인보기를 표시하는 일반적인 방법입니다.

현재 수행중인 작업이 실제로 존재하는 다른보기 컨트롤러에 데이터를 표시하는 경우 (현재 숨겨져 있습니까?), 새 RootViewController를 할당하면 안됩니다 (이름이 주어지면 일반적으로 하나 이상의 VC를 생성해서는 안되며, 일반적으로 "루트"뷰 컨트롤러는 VC 스택의 기반이며 응용 프로그램 전체에 하나만 존재하지만, 어렵고 빠른 규칙은 아닙니다. 대신, 이미 존재하는 RootViewController에 객체 포인터를 가져 오는 방법이 필요합니다.

당신의 ViewController에의 ViewController에서 RootViewController 개체를 통과, 또는 앱 위임 서브 클래스처럼, 어떤 전역 적으로 액세스 할 장소에 보관하고,이 같은 것을 할 중 하나가 필요합니다

: 경우

MyAppDelegate *appDel = (MyAppDelegate *) [[UIApplication sharedApplication] delegate]; 
RootViewController *rvc = appDel.rootViewController; 

을 당신은 당신이 생각하고있는이 두 가지 옵션 중 어느 것에 대해 언급 할 수 있습니다. 나는 좀 더 지시 된 대답을 줄 수 있습니다.

+0

죄송합니다 정교하지 않기. 이 일을 http://mobiforge.com/designing/story/using-popoverview-ipad-app-development 할 노력하고있어하지만 세 번째보기 컨트롤러가 올바르게 rootController에서 끌어 오기 webview 호출 할 수없는 것 같아요. 새 페이지. –