2012-11-12 20 views
6

Voglio impostare il pulsante a livello di programmazione per navigationItem.titleView.Come impostare il pulsante per navigationItem titleView?

Ho provato con il seguente codice ma senza successo;

UIBarButtonItem *navigationTitleButton = [[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStyleBordered target:self action:@selector(backToHOmePage)]; 

navigationTitleButton.image = [UIImage imageNamed:@"title.png"]; 

self.navigationItem.titleView = navigationTitleButton; 

Warnng dice: tipi di puntatore incompatibili assegnando a 'UIView *' da 'UIBarButtonItem * __ forte'

risposta

13

Provare per utilizzare questo codice vedere se funziona per voi

UIView * container = [[UIView alloc]initWithFrame:CGRectZero]; 
UIButton * button = [[UIButton alloc]initWithFrame:CGRectZero]; 
[button addTarget:self action:@selector(backToHOmePage) forControlEvents:UIControlEventTouchUpInside]; 
[button setImage:[UIImage imageNamed:@"clanak_default.png"] forState:UIControlStateNormal]; 
[button sizeToFit]; 
[container addSubview:button]; 
[button release]; 
[container sizeToFit]; 
self.navigationItem.titleView = container; 
[container release]; 
+0

Grande. Ora capisco dove mi sono sbagliato. Grazie. – CroiOS

+7

La tua soluzione funziona, grazie! Perché se UIButton è una sottoclasse di UIView, che un UIButton non può essere usato direttamente come titleView? – cph2117

+0

Funzionerà con un UIButton, UILabel, ecc. Devi solo initWithFrame una dimensione visibile di UIView. Vedi sotto o nella risposta di Evgenjy S. – Chucky

0

Prova a creare un oggetto UIButton per il pulsante al posto di un UIBarButtonItem uno. UIButton è una sottoclasse di UIView quindi dovresti essere in grado di impostare la proprietà titleView sul UIButton che hai creato.

10

Non è necessario creare BarItem, è necessario creare un oggetto di classe UIView;

ARC

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 
view.backgroundColor = [UIColor clearColor]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame = view.frame; 

[view addSubview:button]; 

self.navigationItem.titleView = view; 

o

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(0, 0, 40, 40); 
    self.navigationItem.titleView = button; 
0

È possibile aggiungere il pulsante in vista poi fare quella vista come la vista titolo di barra di navigazione quindi è possibile modificare il titolo del pulsante in fase di esecuzione tempo facilmente.

2

versione Swift:

var button = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
button.frame = CGRectMake(0, 0, 100, 40) as CGRect 
button.backgroundColor = UIColor.redColor() 
button.setTitle("Button", forState: UIControlState.Normal) 
button.addTarget(self, action: Selector("clickOnButton:"), forControlEvents: UIControlEvents.TouchUpInside) 
self.navigationItem.titleView = button 

Qui potete vedere in ultimo pulsante linea è direttamente impostato sul titleView di navigationItem quale tasto aggiungerà al centro della barra di navigazione.

metodo d'azione per il pulsante è qui sotto:

func clickOnButton(button: UIButton) { 

} 
2

È possibile aggiungere un UIImageView come titleView del navigationItem direttamente, tuttavia non sarà visibile se non si assicurarsi che sia di dimensioni. Il modo più semplice per ridimensionarlo è usare sizeToFit().

In questo esempio arrotondo anche gli angoli e aggiungo la possibilità di sapere se viene toccato.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let titleIconButton = UIButton(type: .Custom) 
    titleIconButton.setImage(UIImage(named: "login-icon"), forState: .Normal) 
    titleIconButton.addTarget(self, action: #selector(titleIconTap), forControlEvents: .TouchUpInside) 
    titleIconButton.clipsToBounds = true 
    titleIconButton.layer.cornerRadius = 4 
    titleIconButton.sizeToFit() 
    navigationItem.titleView = titleIconButton 
} 

enter image description here

1

Swift 3 Versione:

let logoButton = UIButton(type: .custom) 
    logoButton.setImage(#imageLiteral(resourceName: "Logo"), for: .normal) 
    logoButton.sizeToFit() 
    logoButton.addTarget(self, action: #selector(tapLogo), for: .touchUpInside) 

    self.navigationItem.title = "" 
    self.navigationItem.titleView = logoButton 
0

Se hai intenzione di cambiare la button.title in fase di esecuzione, e si modifica il titolo al testo più lungo, non sarà centrato. E se fai button.sizeToFit(), sarà centrato, ma mostrerà il nuovo titolo come "T..e".

La soluzione è mettere UIButton in un UIView. E vincola il pulsante a tutti i lati di UIView. Quindi basta impostare navigationItem.titleView a tale UIView. E gestirà perfettamente le modifiche al titolo programmatico.

Problemi correlati