2010-08-16 7 views
14

Quelqu'un a-t-il réussi à créer un bouton d'information (italique 'i' dans un cercle) dans le code (lire: sans Interface Builder), puis l'attribuer comme l'élément du bouton droit d'une barre de navigation?iPhone: Ajout du bouton Info dans la barre de navigation du code

J'ai regardé partout, et je n'arrive même pas à trouver comment créer un bouton d'information dans le code. Toute aide serait grandement appréciée.

Répondre

32
UIButton *btn = [UIButton buttonWithType:UIButtonTypeInfoDark]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn]; 
+0

Brillant, merci Reena. Je l'ai marqué comme la réponse acceptée, mais si vous seriez si gentil que de pardonner ma malice, puis-je demander comment on pourrait apporter le bouton d'information à gauche par cinq pixels ou plus? L'ajouter comme élément de la barre de droite signifie qu'il est écrasé contre le côté droit de l'écran. –

+1

en utilisant la propriété 'leftBarButtonItem' vous pouvez définir à gauche self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: btn]; – Reena

+1

Désolé Reena. Je le veux comme le bouton droit, je veux juste ajouter un peu d'espace sur la droite (ce qui amène le bouton droit 5px à gauche). Est-ce possible? –

5

Voici une très bonne solution qui couvre tous les points soulevés dans les commentaires ci-dessus. Semblable à la réponse acceptée, mais cette approche inclut un espacement supplémentaire (via la modification du cadre) afin que le bouton ne soit pas écrasé contre le bord droit.

// Create the info button 
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 

// Adjust the frame by adding an addition 10 points to its width so the button is padded nicely 
infoButton.frame = CGRectMake(infoButton.frame.origin.x, infoButton.frame.origin.y, infoButton.frame.size.width + 10.0, infoButton.frame.size.height); 

// Hook the button up to an action 
[infoButton addTarget:self action:@selector(showInfoScreen) forControlEvents:UIControlEventTouchUpInside]; 

// Add the button to the nav bar 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton]; 

// Also make sure to add a showInfoScreen method to your class! 
+0

acclame Kyle a parfaitement fonctionné – adamteale

0

Je suppose que ce sera réponse plus complète et il devrait aider dans toutes les situations:

-(void)viewDidLoad{ 

    //Set Navigation Bar 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)]; 

    //Set title if needed 
    UINavigationItem * navTitle = [[UINavigationItem alloc] init]; 
    navTitle.title = @"Title"; 

    //Here you create info button and customize it 
    UIButton * tempButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 

    //Add selector to info button 
    [tempButton addTarget:self action:@selector(infoButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem * infoButton = [[UIBarButtonItem alloc] initWithCustomView:tempButton]; 

    //In this case your button will be on the right side 
    navTitle.rightBarButtonItem = infoButton; 

    //Add NavigationBar on main view 
    navBar.items = @[navTitle]; 
    [self.view addSubview:navBar]; 

} 
1

Pour Swift:

func addRightNavigationBarInfoButton() { 
    let button = UIButton(type: .infoDark) 
    button.addTarget(self, action: #selector(self.showInfoScreen), for: .touchUpInside) 
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button) 
} 

@objc func showInfoScreen() { 
    // info bar button pressed 
} 
Questions connexes