2009-11-23 32 views
5

Web görünümünde, WebView ilk URL'sinde geri düğmesini göstermeyen basit bir 'Geri' düğmesi (bir gezinme çubuğunda veya bir üst araç çubuğunda) ayarlamak mümkündür - ve yalnızca Birinciye geri dönmek için ikinci bir URL’de mi görünecek?WebView'de gezinme

Bunu yanlış anlayamadığım sürece, Haberler uygulaması gibi birçok hibrit yerel/web uygulamasında, çoğu zaman haber makalelerini tabloda görebilirsiniz (bir 'xcode' programında programlanmış HTML sayfası yerine) makale detay sayfalarına (yine, doğal olarak kodlanmış HTML) - ne anlayamadığım, detay sayfasının (webview'deki 2. URL) bir 'geri düğmesi' ile görüntülendiği, ancak tablonun (webview'deki 1. URL) nasıl yapılacağıdır Bu tür uygulamalarda düğmenin görüntülenmesi var mı?

Şu anda, ekranın üst kısmındaki bir araç çubuğunda 'geri' çubuğu düğme öğesiyle (WebView için 'cangoback' olarak çıkış) açıklandığı şekilde bir web sayfam var. için 'geri dönün' için sayfa -

sadece var olan ettik ne:

Webview - 1 URL HTML tablosu - 'geri' düğmesine gösterileri, ama

(tabii ki) aktif değil

Webview - 2. URL, HTML detay sayfası - 'geri' düğmesi gösterilir ve geri dönebilir.

Sadece 2. URL’de görünmesini veya 1. URL’de HIDDEN olmasını nasıl sağlarız?

Selamlar Randy

DÜZENLEME (25 Kasım)

İşte

benim h var:

#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 

ve burada benim m var:

#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 

Benim IB düzeni:

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

sandım backButton gizlemek için böyle bir şeyle vardı:

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

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

ama uyarı bir UIbarButton öğesi setHidden yanıt veremeyebilir diyor - ve gerçekten de öyle değil.

cevap

6

(webView.canGoBack == YES) ile geri düğmenizi etkinleştirmelisiniz. Bunu webViewDidFinishLoad: gibi bir delege yönteminde yapabilirsiniz.

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

Ardından, backButtonItem öğesinin "Touch Up Inside" eyleminiz bu şekilde görünmelidir.

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

Teşekkür Sbrocket, ama yine de Web görünümündeki 1. URL'yi özelliği olmayan için düğmeye alma aynı sorun yaşıyorum. Önerildiği zaman backButton.hidden'i kullanmayı denediğimde bir hata alıyorum: üye 'gizli' için bir yapı ya da birlik değil. Geri düğmemin yalnızca webview 'cangoback' olduğunda görünmesi ve geri alınamadığında görünmesi için herhangi bir yardımı takdir edin. backButton = benim kod eklemek için açmasının soruyu kaydetmiştiniz webView cangoBack = HAYIR şerefe adamlar azgın ise gizli: kötü kodlanmış mantıkta Ben böyle bir şey istiyorum. –

5

Bunun biraz eski olduğunu biliyorum, ama bu problemi yaşadım. Delegeyi self'a ayarlamamış olmama neden olmuştu. İşte bir başkasının buna karışması durumunda benim viewDidLoad:'um.

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

ve viewDidFinishLoad:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    // snip ... 
    backButton.enabled = (self.webView.canGoBack); 
    forwardButton.enabled = (self.webView.canGoForward); 
} 
+0

teşekkürler, bu gerçekten bana yardımcı oldu! – dot

+0

@mirthlab Thanx gerçekten yardımsever. Ama benim bir endişem var. Ben app çalışıyorum ve url'nin webservice gelir ve Uiwebview'de bunu gösteriyorum. Bazı URL'ler yalnızca içeriğe ve bazılarının da sayfadaki forworded bağlantısına sahip. Bu yüzden sayfanın forworded bağlantısına sahip olduğunu nasıl anlarım? Geri gösterme ve gizleme düğmesini açmak istediğime göre bu konuda ne yapabilirim? – Hitarth