0

J'ai donc un UIViewController (le contrôleur d'application principal est un TabBarController). Sur cela il y a un UINavigationBar, et un UIBarButtonItem. Je suis sûr que j'ai tout correctement branché dans l'Interface Builder et que la sortie dans le code est connecté au bouton dans le fichier .xib. Cela devrait être dû au fait que la méthode fonctionne correctement.Cacher le bouton sur le premier de deux UIViews, mais l'avoir visible sur le second

Maintenant, j'ai un autre bouton sur cette vue qui ouvre une deuxième vue, un UIWebView. Je veux que ce UIBarButtonItem, étiqueté "Back", fasse disparaître UIWebView, et ramène le premier UIView, ce qu'il fait correctement. Toutefois, lorsque vous êtes sur le premier UIView, il n'est pas nécessaire de voir le UIBarButtonItem, alors comment puis-je le cacher, mais ensuite l'afficher pour UIWebView. À propos, les deux vues utilisent le même UINavigationBar, l'UIWebView est affiché dans la barre d'onglets et la barre de navigation.

Voici mon code:

#import "WebViewController.h" 

@implementation WebViewController 
@synthesize webButton; 
@synthesize item; 
@synthesize infoView; 

UIWebView *webView; 


+ (UIColor*)myColor1 { 
    return [UIColor colorWithRed:0.0f/255.0f green:76.0f/255.0f blue:29.0f/255.0f alpha:1.0f]; 
} 

// Creates Nav Bar with default Green at top of screen with given String as title 
+ (UINavigationBar*)myNavBar1: (NSString*)input { 

    UIView *test = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, test.bounds.size.width, 45)]; 
    navBar.tintColor = [WebViewController myColor1]; 

    UINavigationItem *navItem; 
    navItem = [UINavigationItem alloc]; 
    navItem.title = input; 
    [navBar pushNavigationItem:navItem animated:false]; 

    return navBar; 
} 

- (IBAction) pushWebButton { 

    self.navigationItem.rightBarButtonItem = item; 

    CGRect webFrame = CGRectMake(0.0, 45.0, 320.0, 365.0); 
    webView = [[UIWebView alloc] initWithFrame:webFrame]; 

    [webView setBackgroundColor:[UIColor whiteColor]]; 
    NSString *urlAddress = @"http://www.independencenavigator.com"; 
    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    webView.scalesPageToFit = YES; 
    [webView loadRequest:requestObj]; 

    [self.view addSubview:webView]; 
    [webView release]; 

} 

- (void) pushBackButton { 

    [webView removeFromSuperview]; 
} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 

- (void)viewDidLoad 
{ 
    self.navigationItem.rightBarButtonItem = nil; 

    [super viewDidLoad]; 
} 

@end 

Quelqu'un sait?

Répondre

1

Éditer: Cette réponse ne fonctionne pas avec nil, mais je la laisse ici car elle fonctionne quand vous voulez remplacer temporairement le bouton de retour par un autre bouton. Voir la réponse correcte ci-dessous dans les commentaires.

Vous pouvez essayer quelque chose comme ceci:

Dans une application, je travaille sur il y a des cas où je voudrais échanger temporairement le bouton de retour pour un bouton d'annulation,

donc enregistrer une pointeur vers elle:

tempButtonItem = self.navigationItem.leftBarButtonItem;

changer le navigationItem.leftBarButtonItem à un bouton d'annulation: self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed)] autorelease];

Et puis plus tard, quand je veux avoir le bouton de retour à nouveau je le récupérer: self.navigationItem.leftBarButtonItem = self.tempButtonItem;

+0

La chose étrange est, même si je mets le bouton de la barre à zéro élément comme ceci: self.navigationItem.rightBarButtonItem = nil ; Il apparaît toujours n'importe quoi. Je le mets même à zéro sur viewDidLoad, c'est comme si le constructeur de l'interface n'écoutait pas le code. – Scott

+0

Je suppose que je n'ai jamais remarqué parce que je remplace le bouton de retour avec un autre bouton. Vous pouvez essayer ceci: self.navigationItem.hidesBackButton = YES; –

+0

Encore ne fonctionne pas bien Je n'ai aucune idée à ce stade. Dans viewDidLoad, je self.navigationItem.leftBarButtonItem = nil; La méthode du bouton de retour contient le même code. J'essaye de générer le bouton par le code maintenant ainsi sur le bouton de Web clic je fais self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel cible: action de soi: @selector (cancelButtonPressed)] autorelease]; – Scott