Ich kenne die pickerView:viewForRow:forComponent:reusingView
Methode, aber bei der Verwendung der view
geht es in reusingView:
wie kann ich es ändern, um eine andere Textfarbe zu verwenden? Wenn ich view.backgroundColor = [UIColor whiteColor];
benutze, wird keine der Ansichten mehr angezeigt.Wie ändere ich die Farbe des Textes in einem UIPickerView unter iOS 7?
Antwort
Es gibt eine Funktion in der delegierte Methode, die mehr elegant ist:
Objective-C:
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSString *title = @"sample title";
NSAttributedString *attString =
[[NSAttributedString alloc] initWithString:title attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
return attString;
}
Wenn Wenn Sie auch die Farben der Auswahlleiste ändern möchten, musste ich 2 separate UIViews
zu der Ansicht hinzufügen, die die 012 enthält, Abstand 35 Punkte auseinander für eine Picker Höhe von 180
Swift 3:
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let string = "myString"
return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName:UIColor.white])
}
Swift 4:
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let string = "myString"
return NSAttributedString(string: string, attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])
}
Denken Sie daran, wenn Sie die Methode verwenden: Sie don 't muss titleForRowInComponent()
implementieren, wie es nie aufgerufen wird, wenn attributedTitleForRow()
verwendet wird.
Erstaunlich !! Dies ist das beste und sollte die richtige Antwort sein. Vielen Dank. – user1949873
Bei weitem ist dies die beste Antwort, da es auch für Auswahlansichten mit mehr als einer Komponente funktioniert. – PKCLsoft
Gute Arbeit. Ich habe eine Bearbeitung für Leute hinzugefügt, die ein Array zu Ihrer Antwort verwenden. Wenn das ein Problem ist, lass es mich wissen. – Rick
original post [hier] (can I change the font color of the datePicker in iOS7?)
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 44)];
label.backgroundColor = [UIColor grayColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18];
label.text = [NSString stringWithFormat:@" %d", row+1];
return label;
}
// number Of Components
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
// number Of Rows In Component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
return 6;
}
Diese Lösung eignet sich für eine Auswahlansicht mit einer einzelnen Komponente. Wenn Sie mehr als 1 haben, überlappen sich die Beschriftungen von dem, was ich sehen kann. – PKCLsoft
Ich lief das gleiche Problem mit einem PickerView mit zwei Komponenten. Meine Lösung ist ähnlich wie oben mit ein paar Modifikationen. Da ich zwei Komponenten verwende, ist es notwendig, aus zwei verschiedenen Arrays zu ziehen.
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor blueColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18];
//WithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 60)];
if(component == 0)
{
label.text = [countryArray objectAtIndex:row];
}
else
{
label.text = [cityArray objectAtIndex:row];
}
return label;
}
1. Go to storyboard
2. Select PickerView
3. Go to Identity inspector (3rd tab)
4. Add User Defined Runtime Attribute
5. KeyPath = textColor
6. Type = Color
7. Value = [Color of you choice]
in Xamarin, überschreiben die UIPickerModelView Methode GetAttributedTitle
public override NSAttributedString GetAttributedTitle(UIPickerView picker, nint row, nint component)
{
// change text white
string title = GetTitle (picker, row, component); // get current text from UIPickerViewModel::GetTitle
NSAttributedString ns = new NSAttributedString (title, null, UIColor.White); // null = font, use current font
return ns;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel* pickerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 37)];
pickerLabel.text = @"text";
pickerLabel.textColor = [UIColor redColor];
return pickerLabel;
}
Swift 4 (Update an die akzeptierte Antwort)
extension MyViewController: UIPickerViewDelegate{
}
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
return NSAttributedString(string: "your-title-goes-here", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])
}
}
Dies funktioniert: [? Kann ich die Schriftfarbe des Datepicker in iOS7 ändern]
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0,
pickerView.frame.size.width, 44)];
label.backgroundColor = [UIColor grayColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18];
label.text = [NSString stringWithFormat:@" %d", row+1];
return label;
}
// total Components
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
// total rows In Component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:
(NSInteger)component
{
return 6;
}
Sieht aus wie das Kopieren/Einfügen einer der Antworten ist. Wo ist der Unterschied? – Sunil
möglich Duplikat (http://stackoverflow.com/questions/18807940/can-i -change-the-font-Farbe-des-Datumsauswahl-in-ios7) –
@AaronBrager. Nach dieser Anfrage wird kein Duplikat des von Ihnen bereitgestellten Links abgefragt. –