2013-09-20 4 views
0

У меня есть приложение с вкладками с вкладкой, содержащей UIWebView и вторую вкладку с Table View Controller.Загрузка веб-страницы iOS в UIWebView из другого контроллера просмотра

Я пытаюсь сделать так, чтобы, когда я нажимаю на строку в таблице, она берет меня на другую вкладку и загружает веб-страницу.

Вот мой Раскадровка: My Storyboard

Это в моей реализации для веб-просмотра:

-(void)loadAViewer:(NSURL*)viewerURL 
{ 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:viewerURL]; 
    [sfnViewer loadRequest:requestObj]; 
} 

А затем в контроллере табличного:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Get the URL from plist 
    ... 

    //Generate url, pass it in and switch to web view tab 
    viewerURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/viewer?username=%@&pw=%@&%@", web, loc, user, pass, params]]; 

    ViewerFirstViewController *viewerWebView = [[ViewerFirstViewController alloc] init]; 
    [viewerWebView loadAViewer:viewerURL]; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [self.tabBarController setSelectedIndex:0]; 

} 

В настоящее время ничего не происходит. Я перешел на другую вкладку, но с пустым UIWebView - не загружается страница, но она не сбой.

// Правка - Изменения, сделанные на основе ответа от Стива

Основываясь на этом, я добавил @property (сильная, неатомическая) NSURL viewerUrl; в моем файле .h для вкладки UIWebView.

Я синтезировал его в формате .m и добавил в свой метод viewDidLoad.

NSURLRequest *requestObj = [NSURLRequest requestWithURL:viewerURL]; 
[sfnViewer loadRequest:requestObj]; 

В настольном контроллере просмотра теперь я делаю это.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Get the URL from plist 
    ... 

    //Generate url, pass it in and switch to web view tab 
    viewerURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/viewer?username=%@&pw=%@&%@", web, loc, user, pass, params]]; 

    ViewerFirstViewController *viewerWebView = [[ViewerFirstViewController alloc] init]; 
    [viewerWebView setViewerUrl:viewerURL]; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [self.tabBarController setSelectedIndex:0]; 

} 

По-прежнему безрезультатно.

+0

В чем тут вопрос? Разве это не работает? Какое сообщение об ошибке вы получаете? – micantox

+0

Он не загружается, он перемещается на другую вкладку, но мне предоставляется пустой контроллер. Отредактированный вопрос, чтобы сделать его более понятным :) –

ответ

1

Это, вероятно, не загружается, потому что, когда вы звоните loadAViewer: сам вид не был загружен еще так sfnViewer розетка не будет подключена к UIWebView в раскадровке.

Вы можете подтвердить это, установив sfnViewer в loadAViewer:.

Если это так, вам необходимо определить свойство NSURL на ViewerFirstViewController и назначить ему вместо вызова loadAViewer:. Затем в методе viewWillAppear: вы должны загрузить URL-адрес в sfnViewer.

Однако это приведет к перезагрузке веб-страницы при каждом обращении к вкладке, вы можете избежать этого, установив, что viewerURL отличается от URL, который в настоящее время используется в веб-представлении: [sfnViewer.request.URL isEqual:self.viewerURL], если это то же самое, не создавайте/не загружайте запрос.

+0

Отредактированный вопрос, основанный на вашем ответе, чтобы показать, что я только что пробовал –

+0

P.S. sfnViewer был nil –

+0

Вы имеете в виду, что он все еще ноль в viewDidLoad? –

Смежные вопросы