UINavigationController et UINavigationBar
yass_1988
Membre
Bonjour,
j'ai un petit problème à vous soumettre. Voila, j'ai une application qui au lancement push vers un formulaire de connexion à un webService ou sinon push vers la liste des utilitaires de mon webService si mes identifiants sont déjà renseigné.
Pour le push vers ces deux vues voici le code source de mon AppDelegate.m:
Donc comme vous le constatez, en plus de push vers l'une ou l'autre vue, j'affecte un label à ma bar de navigation, qui sera un peu si vous voulez le titre de ma vue, label en fonction de tel ou tel vue.
Du coup reprenons, je lance mon application, on imagine que c'est la première fois que je l'utilise cette appli, j'arrive du coup direct à mon formulaire, c'est parfait, j'ai mon titre qui s'affiche bien au milieu de ma bar de navigation. Je renseigne mon formulaire et j'appui sur mon bouton seConnecter (seConnecter me permet de me loguer à mon webService et push vers la liste de mes utilitaires (L'autre vue)). Donc là parfait, j'ai l'affichage que je veux avec le titre que je veux. Voila le code source ma classe FormViewController.m ou est définie mon Action "seConnecter":
Donc là je suis loguer, j'ai accéder à la vue listant tout mes utilitaires, mon navigationbar affiche bien le titre que je veux et en plus j'ai un bouton "Back".
Quand je clique dessus, elle me permet de revenir à la vue d'avant (Mon formulaire), sauf que là au lieu d'afficher en titre de la bar de navigation "Formulaire", il m'affiche un mélange assez beurk de "Formulaire" et "Utilitaire". Pourquoi ?
Et aussi à savoir est il possible d'avoir un autre bouton qui aura la fonction de quitter tout simplement directement mon application ?
j'ai un petit problème à vous soumettre. Voila, j'ai une application qui au lancement push vers un formulaire de connexion à un webService ou sinon push vers la liste des utilitaires de mon webService si mes identifiants sont déjà renseigné.
Pour le push vers ces deux vues voici le code source de mon AppDelegate.m:
<br />
<br />
<br />
#import "AppDelegate.h"<br />
#import "FormulaireViewController.h"<br />
#import "AppViewController.h"<br />
@implementation AppDelegate<br />
@synthesize window = _window;<br />
- (id) init{<br />
if(self=[super init]){<br />
AuthApp=[[Authentification alloc ]init];<br />
IdentiApp=[[Identification alloc]init];<br />
}<br />
return self;<br />
}<br />
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions<br />
{<br />
//démarrage de l'application on initialisnt ma sandbox (Pour mes test) et appel à la méthode loadMyDefaultViewController qui s'occupera d'instancier et de charger la vue adéquoite en fonction si ma sandbox est renseigné ou pas<br />
<br />
//Initialiser ma sandbox (pour mes test)<br />
[IdentiApp setAdresse:@""];<br />
NSLog(@"l'adresse stocké dans le bac a sable est le suivant: %@",[IdentiApp getAdresse]);<br />
[IdentiApp setLogin:@""];<br />
NSLog(@"le login stocké dans le bac a sable est le suivant: %@",[IdentiApp getLogin]);<br />
[IdentiApp setPassword:@""];<br />
NSLog(@"le mot de passe stocké dans le bac a sable est le suivant: %@",[IdentiApp getPassword]);<br />
//<br />
[NSThread sleepForTimeInterval:1];<br />
[self loadMyDefaultViewController];<br />
<br />
return YES;<br />
}<br />
<br />
- (void)loadMyDefaultViewController<br />
{ <br />
//Vérifier si les élèments de ma sandbox est initialiser à vide ou alors si elle a conservé les identifiants d'authentification de la session précédent, en fonction, la vue du formulaire ou celle de la liste des utilitaires sera instancié et push vers elle<br />
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;<br />
[navigationController setNavigationBarHidden:NO animated:NO];<br />
navigationController.navigationBar.barStyle=UIBarStyleBlack;<br />
<br />
if (([[IdentiApp getAdresse] length]==0) || ([[IdentiApp getLogin] length]==0) || ([[IdentiApp getPassword] length]==0)){<br />
[navigationController setNavigationBarHidden:NO animated:NO];<br />
<br />
UILabel * nav_title_form = [[UILabel alloc] initWithFrame:CGRectMake(115, 5, 190, 30)];<br />
nav_title_form.font = [UIFont fontWithName:@"Arial-BoldMT" size:18];<br />
nav_title_form.textColor = [UIColor whiteColor];<br />
nav_title_form.adjustsFontSizeToFitWidth = YES;<br />
nav_title_form.text = @"Formulaire";<br />
nav_title_form.backgroundColor = [UIColor clearColor];<br />
[navigationController.navigationBar addSubview:nav_title_form];<br />
<br />
<br />
FormulaireViewController *formViewController = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"Formulaire"];<br />
[navigationController pushViewController:formViewController animated:YES];<br />
<br />
}<br />
else {<br />
<br />
BOOL testConnectionApp;<br />
testConnectionApp=[AuthApp login:[IdentiApp getAdresse] Lelogin:[IdentiApp getLogin] Lepassword:[IdentiApp getPassword]];<br />
NSLog(@"%@",[AuthApp token]);<br />
if(testConnectionApp==YES){<br />
[navigationController setNavigationBarHidden:NO animated:NO];<br />
<br />
UILabel * nav_title_utility = [[UILabel alloc] initWithFrame:CGRectMake(115, 5, 190, 30)];<br />
nav_title_utility.font = [UIFont fontWithName:@"Arial-BoldMT" size:18];<br />
nav_title_utility.textColor = [UIColor whiteColor];<br />
nav_title_utility.adjustsFontSizeToFitWidth = YES;<br />
nav_title_utility.text = @"Utilitaires";<br />
nav_title_utility.backgroundColor = [UIColor clearColor];<br />
[navigationController.navigationBar addSubview:nav_title_utility]; <br />
<br />
AppViewController *appliViewController = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"App"];<br />
[navigationController pushViewController:appliViewController animated:YES];<br />
<br />
}<br />
<br />
}<br />
}<br />
<br />
- (void)applicationWillResignActive:(UIApplication *)application<br />
{<br />
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.<br />
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.<br />
}<br />
- (void)applicationDidEnterBackground:(UIApplication *)application<br />
{<br />
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.<br />
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.<br />
}<br />
- (void)applicationWillEnterForeground:(UIApplication *)application<br />
{<br />
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.<br />
}<br />
- (void)applicationDidBecomeActive:(UIApplication *)application<br />
{<br />
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.<br />
}<br />
- (void)applicationWillTerminate:(UIApplication *)application<br />
{<br />
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.<br />
}<br />
@end<br />
Donc comme vous le constatez, en plus de push vers l'une ou l'autre vue, j'affecte un label à ma bar de navigation, qui sera un peu si vous voulez le titre de ma vue, label en fonction de tel ou tel vue.
Du coup reprenons, je lance mon application, on imagine que c'est la première fois que je l'utilise cette appli, j'arrive du coup direct à mon formulaire, c'est parfait, j'ai mon titre qui s'affiche bien au milieu de ma bar de navigation. Je renseigne mon formulaire et j'appui sur mon bouton seConnecter (seConnecter me permet de me loguer à mon webService et push vers la liste de mes utilitaires (L'autre vue)). Donc là parfait, j'ai l'affichage que je veux avec le titre que je veux. Voila le code source ma classe FormViewController.m ou est définie mon Action "seConnecter":
#import "FormulaireViewController.h"<br />
#import "Authentification.h"<br />
#import "AppViewController.h"<br />
@interface FormulaireViewController ()<br />
@end<br />
@implementation FormulaireViewController<br />
@synthesize adresse;<br />
@synthesize login;<br />
@synthesize password;<br />
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil<br />
{<br />
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];<br />
if (self) {<br />
// Custom initialization<br />
}<br />
return self;<br />
}<br />
- (void)viewDidLoad<br />
{<br />
[super viewDidLoad];<br />
// Do any additional setup after loading the view.<br />
}<br />
- (void)viewDidUnload<br />
{<br />
[self setAdresse:nil];<br />
[self setLogin:nil];<br />
[self setPassword:nil];<br />
[super viewDidUnload];<br />
// Release any retained subviews of the main view.<br />
}<br />
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation<br />
{<br />
return (interfaceOrientation == UIInterfaceOrientationPortrait);<br />
}<br />
- (IBAction)seConnecter:(id)sender {<br />
<br />
NSString *textAdresse=adresse.text;<br />
NSString *textLogin=login.text;<br />
NSString *textPassword=password.text;<br />
BOOL testConnectionForm;<br />
Authentification *AuthForm=[[Authentification alloc] init];<br />
testConnectionForm=[AuthForm login:textAdresse Lelogin:textLogin Lepassword:textPassword];<br />
NSLog(@"%@",[AuthForm token]);<br />
if(testConnectionForm==YES){<br />
<br />
Identification *IdentyForm=[[Identification alloc] init];<br />
[IdentyForm setAdresse:textAdresse];<br />
[IdentyForm setLogin:textLogin];<br />
[IdentyForm setPassword:textPassword];<br />
NSLog(@"%@",[IdentyForm getAdresse]);<br />
<br />
UILabel * titleApp = [[UILabel alloc] initWithFrame:CGRectMake(115, 5, 190, 30)];<br />
titleApp.font = [UIFont fontWithName:@"Arial-BoldMT" size:18];<br />
titleApp.textColor = [UIColor whiteColor];<br />
titleApp.adjustsFontSizeToFitWidth = YES;<br />
titleApp.text = @"Utilitaire";<br />
titleApp.backgroundColor = [UIColor clearColor];<br />
<br />
[self.navigationController.navigationBar addSubview:titleApp];<br />
[self.navigationController.navigationBar exchangeSubviewAtIndex:0 withSubviewAtIndex:1];<br />
<br />
AppViewController *appliViewControllerForm = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"App"];<br />
[self.navigationController setNavigationBarHidden:NO animated:NO];<br />
[self.navigationController pushViewController:appliViewControllerForm animated:YES];<br />
<br />
}else {<br />
<br />
UIAlertView *alertForm=[[UIAlertView alloc] initWithTitle:@"Connection échoué" message:@"Votre tentative de connection a échoué. Vérifié que vous ayez bien saisie vos données ou que votre connection réseau fonctionne parfaitement" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];<br />
[alertForm show];<br />
<br />
}<br />
}<br />
-(IBAction)saisieReturn:(id)sender<br />
{<br />
[sender resignFirstResponder];<br />
}<br />
@end
Donc là je suis loguer, j'ai accéder à la vue listant tout mes utilitaires, mon navigationbar affiche bien le titre que je veux et en plus j'ai un bouton "Back".
Quand je clique dessus, elle me permet de revenir à la vue d'avant (Mon formulaire), sauf que là au lieu d'afficher en titre de la bar de navigation "Formulaire", il m'affiche un mélange assez beurk de "Formulaire" et "Utilitaire". Pourquoi ?
Et aussi à savoir est il possible d'avoir un autre bouton qui aura la fonction de quitter tout simplement directement mon application ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En faite, je souhaiterais qu'au niveau de ma vue (ma liste d'utilitaire) ne plus avoir le bouton "back" et que au niveau de l'autre vue (mon Formulaire), sur la bar de navigation, avoir 2 boutons, un bouton qui me permettrais de quitter l'application et une autre, un bouton personnalisé, qui en faite remplacera mon bouton "Se connecter" qui se trouve en bas de ma vue.
Si tu souhaites modifier la façon dont le titre est affiché, deux possibilités :
Je te conseille de lire la documentation fournie par Apple : Updating the Navigation Bar
Du coup, je vois maintenant comment afficher un bouton dans la barre de navigation.
Je voudrais juste du coup savoir, vu que je souhaite entre autre un bouton qui me permettrais de quitter l'application, existerait il une fonction prédifinis pour cela ?
/huh.gif' class='bbc_emoticon' alt='???' />
C'est normal, ça s'appelle le multitache. Une application iOS n'est jamais quité sauf s'il y a un manque de ressource.