2009-11-23 25 views
5

Với chế độ xem web, bạn có thể thiết lập nút 'Quay lại' đơn giản (trong thanh điều hướng hoặc thanh công cụ trên cùng) không hiển thị nút quay lại trên URL đầu tiên của WebView - và chỉ xuất hiện trên một URL thứ hai để quay lại đầu tiên? Trừ khi tôi nhận được điều này sai, trong rất nhiều ứng dụng gốc/web lai như ứng dụng Tin tức, bạn thường thấy các bài viết trong một bảng (trang HTML thay vì bảng 'được lập trình trong xcode') mà siêu liên kết các trang chi tiết bài viết (một lần nữa, HTML thay vì được mã hóa nguyên gốc) - những gì tôi không thể tìm được, là trang chi tiết (URL thứ 2 trong webview) hiển thị bằng 'nút quay lại' nhưng bảng (URL đầu tiên trong chế độ xem web) thì không ' t có nút hiển thị trong các loại ứng dụng này không?Điều hướng WebView

Hiện tại, tôi có chế độ xem web như được mô tả, với mục nút 'back' trên thanh công cụ ở đầu màn hình (cửa sổ là 'cangoback' cho WebView) nhưng nút này hiển thị ngay từ đầu khi không có trang để 'trở lại' để -

Những gì tôi đã có chỉ đơn giản là:

Webview - URL 1st, HTML bảng - 'trở lại' nút chương trình, nhưng không hoạt động (tất nhiên)

Chế độ xem web - URL thứ 2, trang chi tiết HTML - nút 'quay lại' hiển thị và có thể quay lại.

Bạn làm cách nào để nó chỉ xuất hiện trên URL thứ 2 hoặc là HIDDEN trên URL đầu tiên?

Trân Randy

EDIT (25 tháng 11)

Dưới đây là h tôi:

#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 

và đây là m của tôi:

#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 

bố trí IB của tôi:

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

tưởng tôi đã có nó với một cái gì đó như thế này để che giấu sự backButton:

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

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

nhưng cảnh báo nói rằng một mục UIbarButton có thể không đáp ứng với setHidden - và thực sự nó không.

Trả lời

6

Bạn nên bật nút quay lại của mình khi (webView.canGoBack == YES). Bạn có thể làm điều này theo phương thức đại biểu như 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); 
} 

Sau đó, hành động "Touch Up Inside" của bạn cho backButtonItem sẽ như thế này.

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

Cảm ơn Sbrocket, nhưng tôi vẫn đang gặp những rắc rối tương tự nhận được nút không đề cập trên URL 1 của webview. Khi được đề nghị tôi cố gắng sử dụng backButton.hidden tôi nhận được một lỗi: yêu cầu cho thành viên 'ẩn' không phải là một cấu trúc hoặc công đoàn. Đánh giá cao bất kỳ trợ giúp nào để đưa nút quay lại của tôi chỉ xuất hiện khi webview 'cangoback' và không xuất hiện khi nó không thể goback. Trong logic kém mã Tôi muốn một cái gì đó như: backButton = ẩn Nếu WebView cangoBack = NO cổ vũ chàng trai randy Tôi đã chỉnh sửa câu hỏi inital để bao gồm mã của tôi. –

5

Tôi biết điều này hơi cũ nhưng tôi đã gặp sự cố này. Đó là vì tôi đã không đặt đại biểu cho self. Đây là số viewDidLoad: của tôi chỉ trong trường hợp người khác gặp phải vấn đề này.

- (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); 
} 
+0

cảm ơn, điều này thực sự đã giúp tôi! – dot

+0

@mirthlab Thanx thực sự hữu ích. Nhưng tôi có một mối quan tâm. i m ứng dụng làm việc và url đến từ webservice và i m hiển thị trong Uiwebview. một số url chỉ có nội dung và một số có liên kết forworded cũng trong trang .. vì vậy làm thế nào tôi có thể nhận được điều này mà trang có liên kết forworded? phụ thuộc vào điều đó tôi muốn hiển thị và ẩn nút quay lại vì vậy vui lòng đề nghị tôi những gì tôi có thể làm cho điều đó? – Hitarth

Các vấn đề liên quan