2009-02-19 14 views
26

J'ai créé une nouvelle application iPhone basée sur la navigation. J'ai ajouté ceci au RootViewController.Ajout du bouton gauche à UINavigationBar (iPhone)

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] init]; 
self.navigationItem.leftBarButtonItem = addButton; 
self.navigationItem.leftBarButtonItem.enabled = YES; 
} 

Aucun bouton gauche n'apparaît cependant. Y a-t-il quelque chose que je dois faire?

Répondre

53

Vous ne définissez pas ce que le bouton fait réellement. Ceci est une ligne de mon application:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelEdit:)]; 

cancelEdit:, le sélecteur est dans la classe actuelle (auto) et est définie comme:

- (void) cancelEdit: (id) sender; 
+1

Génial, merci. Où trouvez-vous les différents sélecteurs disponibles? Le document est très vague à ce sujet. J'ai défini une méthode d'instance et l'ai mise comme sélecteur mais elle n'a jamais été exécutée. Je voudrais glisser dans une vue détaillée lorsque le bouton est cliqué. – 4thSpace

+1

Le sélecteur est défini dans la classe (j'ai ajouté cela à ma réponse). –

+0

J'ai également découvert comment faire cela via IB. Il est ajouté en tant qu'élément de navigation mais pas via RootViewController.xib, où se trouve la table. Il doit être ajouté à MainWindow.xib. – 4thSpace

11

Sur cette question:

Génial, merci. Où trouvez-vous les différents sélecteurs disponibles? Le document est très vague à ce sujet. J'ai défini une méthode d'instance et l'ai définie comme sélecteur mais elle n'a jamais été exécutée. Je voudrais glisser dans une vue de détail quand le bouton est cliqué. - 4thSpace février 19 à 16:19

je vais l'endroit où je besoin de plus d'informations et appuyez sur la touche d'échappement (Esc). Ainsi, dans cet exemple:

...(beginning of line)... @selector(Place Cursor Here, press Esc) ...

Une liste des sélecteurs disponibles apparaîtra. Pour les programmeurs Microsoft, c'est comme Intellisense, mais vous devez le demander avec Esc (cela n'apparaît pas automatiquement comme dans Visual Studio). Pratiquement parlant, XCode crée la plupart de ce que vous essayez de créer lorsque vous commencez à taper et cela aide vraiment quand vous comprenez que la touche Tab est votre ami. (Bien ... c'est mon ami ... ayant la vie solitaire que j'ai)

Maintenant, si vous avez besoin de votre propre sélecteur, vous pouvez placer votre étiquette là-dedans (mySelector: par exemple), puis , plus bas dans votre code, construire:

- (IBAction)mySelector:(id)sender {
NSLog(@"You touched me THERE!");
}

en outre, dans le fichier en-tête (.h), assurez-vous de mettre un correspondant:

-(IBAction) mySelector:(id)sender;

+0

Merci pour l'astuce clé d'échappement! Je me demandais à ce sujet. :) – Helephant

+0

BTW - Control-virgule présentera une liste que vous pouvez faire défiler. – mobibob

+0

Nevermind - J'ai juste essayé l'ESC et c'est la même chose que ma Control-virgule et un * lot * plus facile à frapper rapidement! Ton commentaire est meilleur ... :) – mobibob

13

Il existe en fait une autre réponse, qui n'est pas listée ici, mais qui pourrait être très utile dans de nombreux cas. Si vous do not want to use UINavigationController, alors self.navigationItem n'est pas une option pour vous.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"imageName"] style:UIBarButtonItemStyleBordered target:self action:@selector(action:)]; 
UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"Bar Title"]; 
navigationItem.leftBarButtonItem = barButton; 
[navigationBar pushNavigationItem:navigationItem animated:NO]; 

Vous pourriez le vouloir lors de la création d'un UIViewController léger avec une barre et des boutons, mais pas de surcharge de navigation.