Ios UIWebView的后退按钮

Ios UIWebView的后退按钮,ios,objective-c,webview,uiwebview,theos,Ios,Objective C,Webview,Uiwebview,Theos,我试图创建一个左导航按钮,将我的webview发送回一个页面,但在尝试编译theos时,会抛出以下错误: 在类型为“DDRootViewController*”的对象上未找到属性“webView”,如果([self.webView canGoBack]){ 我使用的代码如下,如有任何帮助,将不胜感激:) DDRootControllerView.m #import "DDRootViewController.h" @implementation DDRootViewController -

我试图创建一个左导航按钮,将我的webview发送回一个页面,但在尝试编译theos时,会抛出以下错误:

在类型为“DDRootViewController*”的对象上未找到属性“webView”,如果([self.webView canGoBack]){

我使用的代码如下,如有任何帮助,将不胜感激:)

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
@interface DDRootViewController : UIViewController
<UIWebViewDelegate> {}
@end
#导入“DDRootViewController.h”
@DDRootViewController的实现
-(无效)viewDidLoad{
[超级视图下载];
//创建UIWebView
UIWebView*webView=[[UIWebView alloc]initWithFrame:self.view.frame];
webView.delegate=self;
[webView loadRequest:[NSURLRequestRequestWithURL:[NSURL URLWithString:@]https://dylanduff.github.io/WidgetStore/"]]];
[self.view addSubview:webView];
webView.backgroundColor=[UIColor whiteColor];
//NSString*theTitle=[webView stringByEvaluatingJavaScriptFromString:@“document.title”];
self.title=@“小部件存储”;
//创建后退按钮
//self.navigationItem.leftBarButtonItem=[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarbuttonSystemAddTarget:self action:@selector(addButtonTapped:)]autorelease];
}
-(无效)updateBackButton{
如果([self.webView canGoBack]){
if(!self.navigationItem.LeftBarButtonim){
[self.navigationItem setHidesBackButton:是动画:是];

UIBarButtonItem*backItem=[[[UIBarButtonItem alloc]initWithTitle:@“由于您已获取
webView
的本地实例,因此无法在
ViewDidLoad
的范围之外访问它。要访问
webView
实例,您需要像这样获取公共属性

@property(nonatomic, weak) UIWebView *webView
- (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];

}
现在需要将webView对象存储在前面声明的公共属性中,以便可以在整个类中使用该属性,viewDidLoad方法如下所示

@property(nonatomic, weak) UIWebView *webView
- (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];

}

由于您已经获取了
webView
的本地实例,因此无法在
ViewDidLoad
的范围之外访问它。要在
ViewDidLoad
之外访问
webView
的实例,您需要像这样获取公共属性

@property(nonatomic, weak) UIWebView *webView
- (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];

}
现在需要将webView对象存储在前面声明的公共属性中,以便可以在整个类中使用该属性,viewDidLoad方法如下所示

@property(nonatomic, weak) UIWebView *webView
- (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];

}

在viewDidload中,您创建了局部webView变量。当然,从另一个方法中看不到该变量


如果定义了属性webView(正如我从代码中建议的那样),请在viewDidLoad方法中使用self.webView而不是UIWebView*webView。

在viewDidLoad中创建本地webView变量。当然,从其他方法中看不到该变量


如果定义了属性webView(正如我从代码中建议的那样),在viewDidLoad方法中使用self.webView,而不是UIWebView*webView。

应用程序可以编译,但后退按钮不可见:/@DylanDuff您从未在viewDidLoad中调用updateBackButton方法,因此不会创建后退按钮。@DylanDuff您也不需要在代码中使用autorelease。这是早期开发人员创建的产物elopers必须自己进行内存管理。应用程序可以编译,但后退按钮不可见:/@DylanDuff您从未在viewDidLoad中调用updateBackButton方法,因此后退按钮从未创建。@DylanDuff您也不需要在代码中使用autorelease。这是ARC之前开发人员必须保留的一个工件自己动手做内存管理。