Desidero modificare il colore del bordo di un UIPickerView. Non vedo una proprietà tint per UIPickerView. C'è un modo in cui questo potrebbe essere fatto? O una soluzione?Modifica sfondo UIPickerView
Grazie.
Desidero modificare il colore del bordo di un UIPickerView. Non vedo una proprietà tint per UIPickerView. C'è un modo in cui questo potrebbe essere fatto? O una soluzione?Modifica sfondo UIPickerView
Grazie.
Se vuoi solo una soluzione, scatta una schermata nel simulatore, aprilo in Photoshop, ritaglialo solo nell'area UIPickerView, rendi il centro trasparente, applica qualsiasi tinta tu voglia, aggiungi quell'immagine al tuo progetto, e aggiungilo come UIImageView in cima a UIPickerView.
Il mio UIPickerView ha 3 componenti. E nessun indicatore di selezione.
Questo gli dà 11 sottoview. [[picker subviews] count]
Nascondere la prima e l'ultima sottoview rimuove totalmente lo sfondo.
[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];
nascondere ogni terzo altra visualizzazione secondaria (indici 1, 4 e 7) nasconde il fondo opaco sui componenti. Dando un bell'effetto che posso pelleare come desidero.
Speranza che aiuta qualcuno :)
Non è davvero un hack? Apple potrebbe rifiutare un'app per fare questo ... – lostInTransit
[[pick-in subpriews] count] restituisce 0. (Xcode 3.2.1) – Intentss
Clever: anche se Apple potrebbe non piacervi – Moshe
actualy per correggere voi, si può mettere un actualy .png ontop del UIPickerView ed ancora utilizzare il Selettore vista, basta assicurarsi che il mezzo è trasparente o non si vedrà le file.
Questo ha funzionato per me ed è stato davvero facile . –
Credo che anche this article sarà utile.
È anche possibile mascherare il componente. Con un po 'fiddeling è possibile ottenere le dimensioni del componente e tagliare fuori con il seguente codice:
CALayer* mask = [[CALayer alloc] init];
[mask setBackgroundColor: [UIColor blackColor].CGColor];
[mask setFrame: CGRectMake(10.0f, 10.0f, 260.0f, 196.0f)];
[mask setCornerRadius: 5.0f];
[picker.layer setMask: mask];
[mask release];
non dimenticate
#import <QuartzCore/QuartzCore.h>
In XCode 4+, è necessario il frame: [mask setFrame: CGRectMake (10.0f, 10.0f, 260.0f, 196.0f)] ;, ma in caso contrario molto utile e non richiede l'uso di sovrapposizioni di immagini. – Shaun
soluzione molto intelligente, grazie Lukas –
Interessante. Questo * quasi * funziona. Sembra che non stia tagliando tutto il lato destro. http://screencast.com/t/MVyxOIj0mGRT ... Modifica: non avrebbe più senso calcolare gli insiemi dal picker.bounds? – Barry
Il selettore non avrà subviews fino a quando è a pieno carico. Se si tenta di fare questo:
[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];
nel viewDidLoad o viewWillAppear non funzionerà. Tuttavia, ho spostato il mio in uno dei metodi del protocollo UIPickerView e rimosso il frame dello sfondo.
Probabilmente si potrebbe sottoclasse il selettore per farlo un po 'più efficientemente, ma preferisco evitare la sottoclasse.
Oh, anche, questo è probabilmente ovvio, ma se il tuo picker non ha elementi in esso, il codice sopra non cancellerà le viste secondarie.
È possibile modificare il colore di sfondo sostituendo completamente l'immagine di sfondo con uno di propria scelta utilizzando IXPickerOverlayView
available on GitHub (il repository contiene un esempio illustrato di utilizzo di questa classe).
Nota che dovrai tracciare lo sfondo (rettangolare) da zero ma a differenza di qualsiasi soluzione qui menzionata, questo approccio è completamente dinamico: il controllo apparirà correttamente anche se cambi il numero di ruote picker e le loro dimensioni in fase di esecuzione (come fa UIDatePicker quando si modificano le impostazioni locali del sistema).
Una volta ottenuta l'immagine di sfondo, utilizzare IXPickerOverlayView
è semplice come aggiungere un'istanza IXPickerOverlayView
nella parte superiore della vista Selezione e assegnare la proprietà hostPickerView
.
Basta aggiungere questa linea ad uno dei vostri UIPickerView
metodi:
[[[MyPicker subviews] objectAtIndex:4] setBackgroundColor: [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]];
Per migliorare la qualità della risposta, includi come/perché il tuo post risolve il problema. –
objectAtIndex: 4 ??? – Dmitry
Ecco una versione moderna, pixel-perfect w/ARC di risposta s' @Lukas, perché alcune domande non vanno mai fuori moda:
#import <QuartzCore/QuartzCore.h>
// . . .
CALayer* mask = [[CALayer alloc] init];
mask.backgroundColor = [UIColor blackColor].CGColor;
mask.frame = CGRectInset(picker.bounds, 10.0f, 10.0f);
mask.cornerRadius = 5.0f;
picker.layer.mask = mask;
Questa risposta funziona per qualsiasi dimensione della raccoglitrice b/c le dimensioni di livello vengono calcolate on-the-fly.
È possibile effettuare le seguenti operazioni:
impostare il colore di sfondo vista picker da procedura guidata o per codice come segue:
Picker1.backgroundColor = [UIColor someColor];// clearColor for transparent
Impostare il valore alfa per i subviews vista picker numerati 0, 1 e 3. (Don' so perché c'è il sottomenu 2 pensato). Esegui il codice dopo i primi dati di caricamento per la vista del selettore come segue (genererà un'eccezione se lo fai in DidViewLoad).
[(UIView*)[[Picker1 subviews] objectAtIndex:0] setAlpha:someValue];// 0.0f for transparent
[(UIView*)[[Picker1 subviews] objectAtIndex:1] setAlpha:someValue];
[(UIView*)[[Picker1 subviews] objectAtIndex:3] setAlpha:someValue];
Non dimenticare di cancellare il colore di sfondo per l'etichetta che si sta inviando alla vista selettore nel metodo viewForRow.
lbl.backgroundColor = [UIColor someColor];// could be clearColor
Grazie. In nessun altro modo possiamo cambiare la tinta? – lostInTransit
Credo che lo sfondo sia solo un'immagine, quindi è probabile che anche se fosse possibile trovare l'elemento nelle sottoview, non sarebbe tint-able. –
come cambiare l'intero colore di sfondo di UIPickerView? provo personalizzare la vista utilizzare il metodo '- (UIView *) pickerView: (UIPickerView *) pickerView viewForRow: (NSInteger) fila forComponent: (NSInteger) Componente reusingView: (UIView *) vista " sebbene la vista fila è stato aggiornato ma il contenuto a sinistra del Picker mostra ancora il colore grigio originale ... come risolverlo? grazie ... – iXcoder