Ciao a tutti Nella mia app ho un menu laterale che scorre per visualizzare una vista tabella e vi sono dei segues che usano il controller della vista di rivelazione. Il seguito deve connettersi direttamente al controller della vista, altrimenti l'app si blocca in modo da non poter utilizzare un controller di navigazione. La mia domanda è come aggiungere una barra di navigazione con una voce di pulsante della barra senza un controller di navigazione. Ho fatto tutti i miei layout nella storyboard.Come aggiungere una barra di navigazione a una vista senza il controller di navigazione
risposta
Mentre ci sono diversi modi intelligenti per rispondere alla tua domanda. Ho appena risolto a livello di codice e ho scritto il seguente codice nel mio viewWillAppear
(nota - viewDidLoad
è anche bene, ma non suggerito) -
-(void) viewWillAppear:(BOOL)animated { UINavigationBar *myNav = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; [UINavigationBar appearance].barTintColor = [UIColor lightGrayColor]; [self.view addSubview:myNav]; UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:nil]; UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:nil]; UINavigationItem *navigItem = [[UINavigationItem alloc] initWithTitle:@"Navigation Title"]; navigItem.rightBarButtonItem = doneItem; navigItem.leftBarButtonItem = cancelItem; myNav.items = [NSArray arrayWithObjects: navigItem,nil]; [UIBarButtonItem appearance].tintColor = [UIColor blueColor]; }
Quindi, si dispone di una barra di navigazione bianca con oggetti pulsante blu bar senza un controller di navigazione . Ancora una volta, ci sono altri modi per implementarlo nel tuo caso. Spero, questo è stato utile.
uscita -
Aggiornamento -
per aggiungere immagini -
UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,10,32,32)];
[myImage setImage:[UIImage imageNamed:@"image.png"]];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myImage];
[self.view addSubview:myImage];
C'è un modo per utilizzare il NavigationItem
nel costruttore di interfaccia per questo.
Prima aggiungere un NavigationItem
al vostro ViewController
nel costruttore di interfaccia, come si farebbe con un NavigationController
. Assicurati che lo NavigationBar
sia visibile selezionando qualcosa di diverso da Inferred
e None
sotto metriche simulate.
In secondo luogo, in viewDidLoad
, basta aggiungere le seguenti righe:
- (void)viewDidLoad
{
[super viewDidLoad];
UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame];
bar.items = @[self.navigationItem];
[self.view addSubview: bar];
}
Per quanto riguarda frame
, width
sarà lo stesso del vostro ViewController
e height
sarà o 44.0
o 64.0
a seconda se il status bar
è visibile o non.
CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height;
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, navigationBarHeight);
E se vuoi sostenerci diversi orientamenti uso NSLayoutConstraints
:
CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height;
[self.view addConstraints: @[
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeLeft
relatedBy: NSLayoutRelationEqual
toItem: bar
attribute: NSLayoutAttributeLeft
multiplier: 1.0
constant: 0.0],
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeRight
relatedBy: NSLayoutRelationEqual
toItem: bar
attribute: NSLayoutAttributeRight
multiplier: 1.0
constant: 0.0],
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeTop
relatedBy: NSLayoutRelationEqual
toItem: bar
attribute: NSLayoutAttributeTop
multiplier: 1.0
constant: 0.0],
[NSLayoutConstraint constraintWithItem: bar
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 1.0
constant: navigationBarHeight],
]];
Swift 4 Versione
let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 50))
navigationBar.barTintColor = UIColor.lightGray
view.addSubview(navigationBar)
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: nil)
let navigationItem = UINavigationItem(title: "Title")
navigationItem.rightBarButtonItem = cancelButton
navigationItem.leftBarButtonItem = doneButton
navigationBar.items = [navigationItem]
essere molto attenti su come aggiungere in "viewWillAppear", come questo metodo può essere chiamato più volte, (ad esempio appare una modale ....) Usa un approccio pigro:
1) dichiarare una var:
var myNav: UINavigationBar?
2) prova se già impostata:
viewWillAppear:(BOOL)animated {
if self.myNav != nil{
return
}
self.myNav = ....
3) assicurarsi rimuovi uscendo regolatore, ad esempio su didDisappear ...
fare molta attenzione all'aggiunta di "viewWillAppear", in quanto questo metodo può essere chiamato più volte, (ad esempio appare una modale ....) quindi utilizzare un approccio pigro:
1) dichiarare una var:
var myNav: UINavigationBar?
2) prova se già impostata:
viewWillAppear:(BOOL)animated {
if self.myNav != nil{
return
}
self.myNav = ....
3) assicurarsi controllore uscendo rimuovere, ad esempio su didDisappear ...
nota .. non è corretto per specificare la dimensione .. se iOS ruota, non funziona bene ..
ciao, grazie per questa grande soluzione ma sai come avere un pulsante immagine dove è s Annullare piuttosto che solo il testo? – user3381665
Aggiornato la mia risposta. Ehi, mi hai fatto molto codice. Sono sicuro che puoi personalizzare il tuo codice e renderlo funzionale. – raurora
mi dispiace per quell'uomo, sono nuovo di questo da Android e sto solo facendo questa app IOS che il resto della mia squadra è in licenza. – user3381665