2012-09-17 7 views
8

Sono riuscito a cambiare il colore dello navigation bar ma il colore dei pulsanti è ancora nero. C'è un modo per cambiare anche il colore dei pulsanti? Vedi sotto immagine.Come cambiare il colore del pulsante sulla barra di navigazione UIImagePickerController?

AGGIORNAMENTO: Spiacenti, è necessario rimuovere l'immagine a causa del corretto problema di copia.

+0

Cosa hai provato finora? Come riesci a impostare lo sfondo della barra di navigazione? Non l'ho provato da solo, ma mi viene in mente la "UIAppearance" ... – Pfitz

+0

@Pfitz UIAppearance funzionerebbe solo con ios 5.0 e successivi, ma ho come target ios 4.0 –

risposta

0

È possibile ottenere le personalizzazioni desiderate utilizzando le nuove API UIAppearance da iOS 5 e versioni successive. Questo tutorial mostra essenzialmente come.

+0

Ho scelto come target 4.0 e versioni successive, quindi non penso che sarebbe un'opzione –

+0

Quindi potrebbe essere necessario creare il proprio set di pulsanti e posizionarli sulla barra di navigazione. Un altro modo è sovrascrivere i metodi drawrect per la voce del pulsante della barra. – Bourne

21

Non è possibile senza l'immagine personalizzata.

ma si dovrebbe cambiare il colore della tinta, non appena si crea il controller di navigazione:

UIImagePickerController *pickerImg = [[UIImagePickerController alloc] init]; 
pickerImg.navigationBar.barStyle = UIBarStyleBlackOpaque; // Or whatever style. 
// or 
pickerImg.navigationBar.tintColor = [UIColor whateverColor]; 
0

è necessario definire un pulsante UIButtonTypeCustom per il vostro BarButtonItem.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIBarButtonItem *yourBarButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 

Per ulteriori informazioni, dare un'occhiata a questo post: UIBarButtonItem with color?

1

è possibile nascondere la barra naviagtion, e creare una barra navagtion personalizzato utilizzando ImageView e inserire 2 pulsanti it.By questo modo si può cambiare l'immagine/colore dei pulsanti così come la visualizzazione delle immagini anche secondo le vostre esigenze.

per nascondere barra di navigazione:

self.navigationController.navigationBarHidden=YES; 

poi XIB: creare una vista di 44 altezza, posto imageview su di esso e posizionare 2 tasti e 1 etichetta.

Probabilmente questo risolverà il tuo problema.

+0

Questo non funzionerà con UIImagePickerController –

+0

sì hai ragione, non puoi cambiare il colore dei pulsanti su uiimagepickerController, ma puoi creare un imagePickerController personalizzato usando le classi di controllo overlay. per riferimento è possibile controllare questo collegamento: http: //www.devsrealm.com/objective-c/custom-camera-app-1/ – megha

+0

La visualizzazione sovrapposizione funziona solo per la fotocamera, non per la libreria di foto. –

1

@Ankit È possibile provare a ottenere le sottoview dalla barra di navigazione e quindi impostare il colore desiderato. Ho usato questo approccio per impostare il colore del pulsante Annulla sulla barra di ricerca. La dimensione del pulsante Annulla è 48 * 30 e puoi utilizzare l'array di sottoview per impostare il colore desiderato. Non sono sicuro, ma questo potrebbe fare il lavoro. Di seguito è riportato il codice che ho utilizzato per impostare il colore del pulsante Annulla sulla barra di ricerca.

NSArray *arrySearchSubviews=[searchBarFrnds subviews]; 
for (UIButton *btn in arrySearchSubviews) 
{ 
    CGRect rect=btn.frame; 
    NSLog(@"width %f",rect.size.width); 
    NSLog(@"height %f",rect.size.height); 
    if (rect.size.width==48) 
    { 
     [btn setTintColor:[UIColor colorWithRed:0 green:0.403f blue:0.4f alpha:1.0f]]; 
    } 
} 
+0

+1 per un approccio interessante ma non penso che questa sia la strada da percorrere. –

+0

@AnkitSrivastava hai provato questo approccio? – Singh

+0

complicato per il mio scenario in quanto la libreria di foto viene eseguita in sottocartelle e non posso usare tintColor perché ho come target ios 4.0 e versioni successive. –

1

Se si desidera modificare il colore dei pulsanti che appaiono in tutte le viste come quello che si spera di cambiare, quindi è sufficiente utilizzare il seguente:

UIBarButtonItem *searchBarButton = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]; 
[searchBarButton setTintColor:[UIColor colorWithRed:138.0/255.0 green:183.0/255.0 blue:64.0/255.0 alpha:1.0]]; 
0

Spero che vi aiuterà tu!

Fase 1:

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
[self presentViewController:picker animated:YES completion:NULL]; 

Fase 2:

/* Status bar color */ 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
/* Left button */ 
navigationController.navigationBar.tintColor = [UIColor blackColor]; 
/* Right button color */ 
navigationController.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor blackColor]; 
0

Se non ti dispiace di utilizzare lo stesso stile in tutta l'applicazione, l'uso apparizione come @Bourne suggerito:

let font = UIFont(name:"Montserrat-Bold", size:16)! 
    let attributes: LTDictStrObj = [ 
     NSForegroundColorAttributeName: UIColor.whiteColor(), 
     NSFontAttributeName: font, 
    ] 
    UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal) 

Puoi anche cambiare il colore di sfondo della barra di navigazione se stai usando un colore bianco come me:

 picker.navigationBar.barTintColor = .redColor() 
1
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if ([navigationController isKindOfClass:[UIImagePickerController class]]) { 
     if ([[UIDevice currentDevice] systemVersion].floatValue >= 8.0) { 
      [viewController.navigationController.navigationBar setBarTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"navbar1"]]]; 
     } else { 
      [viewController.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar2"] forBarMetrics:UIBarMetricsDefault]; 
     } 
    viewController.navigationController.navigationBar.tintColor = [UIColor whiteColor]; 
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)]; 
    titleLabel.textColor = [UIColor whiteColor]; 
    titleLabel.textAlignment = NSTextAlignmentCenter; 
    titleLabel.font = [UIFont boldSystemFontOfSize:18.0f]; 
    titleLabel.text = @"photos"; 
    [viewController.navigationItem setTitleView:titleLabel]; 
    viewController.edgesForExtendedLayout = UIRectEdgeNone; 
    } 
} 
+1

Che ne dici di aggiungere un po 'di note di testo o informazioni su quali modifiche hai apportato per farlo funzionare? Basta incollare il codice non ha molto senso, o stai chiedendo è di passare attraverso ogni riga del tuo codice e ingoiarlo? –

0

uno di linea utilizzando UIAppearance:

[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]] setTintColor:[UIColor redColor]];