【问题标题】:Back Button for UIWebViewUIWebView 的后退按钮
【发布时间】:2016-12-09 12:47:34
【问题描述】:

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

在'DDRootViewController *'类型的对象上找不到属性'webView' if ([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

DDRootControllerView.m

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

【问题讨论】:

    标签: ios objective-c webview uiwebview theos


    【解决方案1】:

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

    @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];
    
    }
    

    【讨论】:

    • 应用程序编译但后退按钮不可见:/
    • @DylanDuff 你从不调用 viewDidLoad 中的 updateBackButton 方法,所以从不创建返回按钮。
    • @DylanDuff 您也不需要在代码中使用自动释放。这是 ARC 之前的产物,开发人员必须自己跟上内存管理的步伐。
    【解决方案2】:

    在 viewDidload 中创建 local webView 变量。当然,从其他方法中是看不到的。

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

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2013-05-18
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多