5

WebView を使用すると、WebView の最初の URL に戻るボタンを表示せず、2 番目の URL にのみ表示されるシンプルな「戻る」ボタン (ナビゲーション バーまたは上部ツールバーのいずれか) を設定できます。最初に戻る?

私がこれを誤解していない限り、ニュース アプリなどの多くのハイブリッド ネイティブ/Web アプリでは、記事の詳細ページへのハイパーリンクを示すテーブル (「xcode でプログラムされた」テーブルではなく HTML ページ) にニュース記事が表示されることがよくあります。 (ここでも、ネイティブ コードではなく HTML)これらの種類のアプリに表示されますか?

現在、私は説明されているように、画面上部のツールバーに「戻る」バーボタンアイテム(WebViewの「cangoback」としてのアウトレット)を備えたWebビューを持っていますが、「移動するページがない場合、ボタンは最初から表示されています」戻る -

私が簡単に得たものは次のとおりです。

Webview - 最初の URL、HTML テーブル - 「戻る」ボタンは表示されますが、アクティブではありません (もちろん)

Webview - 2 番目の URL、HTML 詳細ページ - 「戻る」ボタンが表示され、戻ることができます。

2 番目の URL にのみ表示する、または 1 番目の URL で非表示にする方法を教えてください。

よろしくランディ

編集(11月25日)

これが私のhです:

    #import <UIKit/UIKit.h>
    #import "FilmnoirNavController.h"


    @interface FilmnoirViewController : UIViewController <UIWebViewDelegate> {
        IBOutlet UIWebView *webView;
        IBOutlet UIBarButtonItem *backButton;

    }

    @property (nonatomic, retain) UIWebView *webView;
    @property (nonatomic, retain) UIBarButtonItem *backButton;

- (IBAction)backButtonClicked:(id)sender;

    @end

ここに私のmがあります:

#import "FilmnoirViewController.h"


@implementation FilmnoirViewController

@synthesize webView;
@synthesize backButton;

- (IBAction)backButtonClicked:(id)sender {
    [webView goBack];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Initialization code
    }
    return self;
}

/*
 Implement loadView if you want to create a view hierarchy programmatically
 - (void)loadView {
 }
 */

/*
 If you need to do additional setup after loading the view, override viewDidLoad. */
- (void)viewDidLoad {

    NSString *urlAddress = @"http://www.filmsite.org/filmnoir.html";

    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlAddress];

    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    //Load the request in the UIWebView.
    [webView loadRequest:requestObj];
}

- (void)webViewDidFinishLoad {
    // Other stuff if necessary...

    // Could use hidden instead of enabled if you don't even want
    // the button to be visible
    backButton.enabled = (webView.canGoBack);
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}

- (void)dealloc {
    [webView release];
    [super dealloc];
}

@end  

私のIBレイアウト:

Filmnoir View Controller (Film noir)
> View
>>Web View
>>Tool Bar
>>>Bar Button Item (Back)

backButtonを非表示にするために、次のようなものを使用したと思いました:

- (void)webViewDidFinishLoad {
    BOOL ableToGoBack = [webView canGoBack];

    if (ableToGoBack == NO) {
        [backButton setHidden:YES];
    }
    else {
        [backButton setHidden:NO];
    }

しかし、UIbarButton アイテムが setHidden に応答しない可能性があるという警告が表示されます。実際には応答しません。

4

2 に答える 2

7

の場合は、戻るボタンを有効にする必要があります(webView.canGoBack == YES)。のようなデリゲート メソッドでこれを行うことができますwebViewDidFinishLoad:

- (void)webViewDidFinishLoad {
  // Other stuff if necessary...

  // Could use hidden instead of enabled if you don't even want
  // the button to be visible
  backButtonItem.enabled = (webView.canGoBack);
}

次に、backButtonItem の "Touch Up Inside" アクションは次のようになります。

- (IBAction)backButtonClicked:(id)sender {
  [webView goBack];
}
于 2009-11-23T20:37:19.737 に答える
5

私はこれが少し古いことを知っています、しかし私はちょうどこの問題を抱えていました。デリゲートをに設定していなかったためselfです。viewDidLoad:他の誰かがこれに遭遇した場合に備えて、これが私のものです。

- (void)viewDidLoad
{
    [self.webView loadRequest:[[NSURLRequest alloc] initWithURL:self.url]];
    [webView setDelegate:self];
    backButton.enabled = NO;
    forwardButton.enabled = NO;
    [super viewDidLoad];
}

viewDidFinishLoad:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // snip ...
    backButton.enabled = (self.webView.canGoBack);
    forwardButton.enabled = (self.webView.canGoForward);
}
于 2011-04-05T21:06:04.377 に答える