1

私が数年間行ってきた方法は、単純に 2 つのツールバーを作成し、UIWebView の読み込み中はどちらか一方を非表示に設定することです。ツールバーとバーボタンの項目はすべて IB で作成されています。この種の「ハック」なしでできれば、実装を小さくしたいと思います。提供された助けに感謝します。

私が使用しているコードは次のとおりです。

#import "Web.h"

@interface  Web()

@property (nonatomic, strong) IBOutlet UIWebView *webView;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *refreshButton;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *stopButton;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *backButtonRefreshToolbar;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *forwardButtonRefreshToolbar;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *backButtonStopToolbar;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *forwardButtonStopToolbar;
@property (nonatomic, strong) IBOutlet UIToolbar *toolbarStop;
@property (nonatomic, strong) IBOutlet UIToolbar *toolbarRefresh;

@end

@implementation Web

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    self.toolbarStop.hidden = NO;
    self.toolbarRefresh.hidden = YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    self.toolbarStop.hidden = YES;
    self.toolbarRefresh.hidden = NO;
    [self actualizeButtons];
}

- (void)actualizeButtons
{
    self.backButtonRefreshToolbar.enabled = [self.webView canGoBack];
    self.forwardButtonRefreshToolbar.enabled = [self.webView canGoForward];
    self.backButtonStopToolbar.enabled = [self.webView canGoBack];
    self.forwardButtonStopToolbar.enabled = [self.webView canGoForward];
}
4

2 に答える 2

0

はい。単一のUIToolbarインスタンスを使用し、表示されるアイテムを交換する必要があるときはいつでもそのsetItems:animated:メソッドを呼び出します。animated:NOこれにより、一対のツールバーを表示/非表示にするのと同じ視覚効果が得られるはずです。

タイトルを変更する必要がある場合possibleTitlesは、関連するプロパティを設定することもできます。UIBarButtonItem

于 2012-12-01T21:31:40.873 に答える
0

これは、上記のヘルプに基づいて私が思いついたものです。

@property (nonatomic, strong) IBOutlet UIToolbar *webToolbar;
@property (nonatomic, strong) UIBarButtonItem *backButton;
@property (nonatomic, strong) UIBarButtonItem *forwardButton;
@property (nonatomic, strong) UIBarButtonItem *refreshButton;
@property (nonatomic, strong) UIBarButtonItem *stopButton;
@property (nonatomic, strong) UIBarButtonItem *flexibleItem;

- (void)toolbarButtons
{
    self.backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIButtonBarArrowLeft.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(goBack)];

    self.forwardButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIButtonBarArrowRight.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(goForward)];

    self.backButton.enabled = [self.webView canGoBack];
    self.forwardButton.enabled = [self.webView canGoForward];

    self.flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                  target:nil
                                                                  action:nil];


    self.refreshButton = [[UIBarButtonItem alloc]
                      initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                      target:self action:@selector(refreshWebView)];

    self.refreshButton.style = UIBarButtonItemStyleBordered;

    self.stopButton = [[UIBarButtonItem alloc]
                      initWithBarButtonSystemItem:UIBarButtonSystemItemStop
                      target:self action:@selector(stop)];

    self.stopButton.style = UIBarButtonItemStyleBordered;

    if(self.webView.loading)
    {
        NSArray *items = [NSArray arrayWithObjects: self.backButton, self.forwardButton, self.flexibleItem, self.stopButton, nil];
        [self.webToolbar setItems:items animated:NO];
    }
    else
    {
        NSArray *items = [NSArray arrayWithObjects: self.backButton, self.forwardButton, self.flexibleItem, self.refreshButton, nil];
        [self.webToolbar setItems:items animated:NO];
    }
}
于 2012-12-01T22:48:44.187 に答える