2016-12-09 12 views
0

Im пытается создать левую кнопку навигации, чтобы отправить мою WebView назад страницу, но при попытке компиляции Теос выдает следующее сообщение об ошибке:Назад Кнопка UIWebView

свойство «Webview» не найден на объект типа «DDRootViewController * ', если ([self.webView canGoBack]) {

код Im используя ниже, любая помощь будет принята с благодарностью :)

DDRootControllerView.m

#import "DDRootViewController.h" 

@implementation DDRootViewController 

- (void)viewDidLoad{ 

    [super viewDidLoad]; 

     //Create UIWebView 
      UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.frame]; 
      webView.delegate = self; 
      [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://dylanduff.github.io/WidgetStore/"]]]; 
      [self.view addSubview:webView]; 
      webView.backgroundColor = [UIColor whiteColor]; 

      //NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"]; 
      self.title = @"Widget Store"; 

     //Create back button 
      //self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)] autorelease]; 


} 

- (void)updateBackButton { 
    if ([self.webView canGoBack]) { 
     if (!self.navigationItem.leftBarButtonItem) { 
      [self.navigationItem setHidesBackButton:YES animated:YES]; 
      UIBarButtonItem *backItem = [[[UIBarButtonItem alloc] initWithTitle:@"<" style:UIBarButtonItemStylePlain target:self action:@selector(backWasClicked:)] autorelease]; 
      [self.navigationItem setLeftBarButtonItem:backItem animated:YES]; 
     } 
    } 
    else { 
     [self.navigationItem setLeftBarButtonItem:nil animated:YES]; 
     [self.navigationItem setHidesBackButton:NO animated:YES]; 
    } 
} 

- (void)webViewDidStartLoad:(UIWebView *)webView { 
    [self updateBackButton]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [self updateBackButton]; 
} 

- (void)backWasClicked:(id)sender { 
    if ([self.webView canGoBack]) { 
     [self.webView goBack]; 
    } 
} 


@end 

DDRootControllerView.m

@interface DDRootViewController : UIViewController 
<UIWebViewDelegate> {} 
@end 

ответ

2

Как Вы взяли местный экземпляр webView, вы не можете получить доступ к нему из сферы ViewDidLoad. Для доступа к экземпляру webView вне viewDidLoad вы должны принять общественную собственность для того, как этот

@property(nonatomic, weak) UIWebView *webView 

Теперь вам нужно хранить WebView объект в государственной собственности объявленной ранее, так что вы можете использовать это свойство всего класса, ваш метод viewDidLoad будет выглядеть следующим образом

- (void)viewDidLoad{ 

    [super viewDidLoad]; 

    //Create UIWebView 
      self.webView = [[UIWebView alloc]initWithFrame:self.view.frame]; 
      self.webView.delegate = self; 
      [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://dylanduff.github.io/WidgetStore/"]]]; 
      [self.view addSubview:self.webView]; 
      self.webView.backgroundColor = [UIColor whiteColor]; 

      //NSString *theTitle=[self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]; 
      self.title = @"Widget Store"; 

     //Create back button 
      //self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)] autorelease]; 

} 
+0

Приложение компилируется, но кнопка «Назад» не отображается:/ –

+0

@DylanDuff Вы никогда не вызываете метод updateBackButton в viewDidLoad, поэтому кнопка «Назад» никогда не создается. – tww0003

+0

@DylanDuff Вам также не нужно использовать autorelease в вашем коде. Это артефакт с дней до ARC, когда разработчикам приходилось не отставать от управления памятью. – tww0003

0

В viewDidload вы создаете локальную переменную WebView. Конечно, это не видно из другого метода.

Если у вас есть свойство webView, определенное (как я могу предложить из кода), используйте self.webView вместо UIWebView * webView в методе viewDidLoad.