Ios UIWebView的后退按钮
我试图创建一个左导航按钮,将我的webview发送回一个页面,但在尝试编译theos时,会抛出以下错误: 在类型为“DDRootViewController*”的对象上未找到属性“webView”,如果([self.webView canGoBack]){ 我使用的代码如下,如有任何帮助,将不胜感激:) DDRootControllerView.mIos 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 -
#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之前开发人员必须保留的一个工件自己动手做内存管理。