2009-11-23 10 views
5

Con una vista web, es posible configurar un simple botón 'Atrás' (ya sea en una barra de navegación o una barra de herramientas superior) que no muestre el botón Atrás en la primera URL de WebView, y solo apareciendo en una segunda URL para volver a la primera? A menos que me esté equivocando, en muchas aplicaciones híbridas nativas/web como News, a menudo ves artículos de noticias en una tabla (página HTML en lugar de una tabla 'programada en xcode') que hipervínculo a las páginas de detalles del artículo (una vez más, HTML en lugar de codificado de forma nativa): lo que no puedo entender es cómo la página de detalles (segunda URL en la vista web) se muestra con un "botón de retroceso" pero la tabla (primera URL en la vista web) no ¿Tiene el botón que se muestra en este tipo de aplicaciones?Navegue por WebView

Actualmente, tengo una vista web como la descrita, con un elemento de barra de 'respaldo' en una barra de herramientas en la parte superior de la pantalla (salida como 'cangoback' para WebView) pero el botón está visible desde el principio cuando no hay página a 'volver' a -

Lo que tengo es simplemente:

Webview - primera URL, tabla HTML - atrás 'muestra de botón, pero no está activo (por supuesto)

Webview: segunda URL, página de detalles de HTML - muestra el botón 'volver', y puede volver atrás.

¿Cómo se consigue que solo aparezca en la 2ª URL o se oculte en la 1ª URL?

Saludos Randy

EDITAR (25 de noviembre)

Aquí está mi 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 

y aquí está mi 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 

Mi diseño del IB:

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

pensé que lo tenía con algo como esto para ocultar la backButton:

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

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

pero la advertencia dice un artículo UIbarButton puede no responder a setHidden - y de hecho no lo hace.

Respuesta

6

Debe habilitar su botón Atrás cuando (webView.canGoBack == YES). Puede hacer esto en un método delegado como 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); 
} 

Luego, su acción "Retocar dentro" para el elemento BackButton debería verse así.

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

Gracias Sbrocket, pero sigo teniendo el mismo problema para conseguir el botón para no figurar en primera URL de vista web. Cuando, como se sugirió, intento usar backButton.hidden, obtengo un error: solicitud de miembro 'oculto', no una estructura o unión. Aprecie cualquier ayuda para que mi botón Atrás aparezca solo cuando la vista web 'cangoback' no aparezca cuando no pueda recuperarse. En la lógica mal codificado Quiero algo como: backButton = hidden web View Si cangoBack = NO Saludos muchachos Randy He editado pregunta inital para incluir mi código. –

5

Sé que esto es un poco viejo, pero acabo de tener este problema. Fue porque no había configurado el delegado en self. Aquí está mi viewDidLoad: en caso de que alguien más se encuentre con esto.

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

y viewDidFinishLoad:

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

gracias, ¡esto realmente me ayudó! – dot

+0

@mirthlab Gracias es realmente útil. Pero tengo una preocupación. Estoy trabajando en la aplicación y la URL proviene del servicio web y estoy mostrando eso en Uiwebview. algunas url solo tienen contenido y algunas tienen un enlace fordorded también en la página ... así que ¿cómo puedo obtener esto de que la página tiene un enlace forworded? Depende de que quiero mostrar y ocultar el botón Atrás, así que amablemente sugerirme ¿qué puedo hacer para eso? – Hitarth