2010-08-16 28 views
14

Qualcuno ha avuto successo nella creazione di un pulsante informazioni (in corsivo 'i' in un cerchio) nel codice (leggi: senza Interface Builder), quindi assegnandolo come l'elemento pulsante barra destra di una barra di navigazione?iPhone: pulsante Aggiungi informazioni come elemento pulsante barra destra nella barra di navigazione nel codice

Ho cercato ovunque e non riesco nemmeno a trovare come creare un pulsante di informazioni nel codice. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

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

brillante, grazie Reena. L'ho contrassegnato come la risposta accettata, ma se fossi così gentile da perdonare la mia sfacciataggine, posso chiederti come si potrebbe portare il bottone info a sinistra di cinque pixel o così? Aggiungendolo come elemento pulsante della barra destra significa che è abbastanza schiacciato contro il lato destro dello schermo. –

+1

utilizzando la proprietà 'leftBarButtonItem' che è possibile impostare a sinistra self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: btn]; – Reena

+1

Mi dispiace Reena. Lo voglio come elemento pulsante della barra di destra, voglio solo aggiungere un po 'di spazio a destra (portando quindi il tasto destro di 5px a sinistra). È possibile? –

5

Ecco una soluzione di bell'aspetto che penso copre tutti i punti sollevati nei commenti sopra. Simile alla risposta accettata, ma questo approccio include spaziatura aggiuntiva (tramite la modifica della cornice) in modo che il pulsante non venga sfasciato contro il bordo destro.

// 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

applausi Kyle ha funzionato perfettamente – adamteale

0

Credo che sarà la risposta più completa e dovrebbe aiutare in qualsiasi situazione:

-(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

per 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 
} 
Problemi correlati