2015-11-11 13 views
5

mit Objective-C, habe ich den Code unten Schriftfamilie einstellen/ändern und die Größe eines Picker:Ändern Schriftart und seine Größe eines Picker in schnellen

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
UILabel* tView = (UILabel*)view; 
if (!tView){ 
    tView = [[UILabel alloc] init]; 
    // Setup label properties - frame, font, colors etc 
    tView.font = [UIFont fontWithName:@"Times New Roman" size:fontsize];; 
} 
tView.text = [_mysitedata findKeyForRow:row]; 
NSLog(@"C key:%@ row:%ld comp:%ld", tView.text, (long int)row, (long int)component); 
return tView; 
} 

Allerdings ist Swift kein akzeptieren Guss von UIView UILabel und daher kann ich diesen Weg nicht folgen, die so etwas wie unten gezeigt aussehen:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 
    let label = view as! UILabel 
    label.font = UIFont(name: "Times New Roman", size: 1.0) 
    label.text = pickerData[row] 
    return label 
} 

der erste abgetan (let Etikett ....) throuws eine Ausnahme zur Laufzeit:

EXC-BAD BETRIEBS (code = EXC_I386_INVOP, Subcode = 0x0)

+0

Dieser Link [link] http://stackoverflow.com/questions/27455345/uipickerview-wont-allow-changing-font- name-and-size-via-delegents-attractedt [> link] löst das Problem. –

Antwort

1

Eine idiomatische Swift Codierung wäre:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 
    guard let label = view as? UILabel else { 
    preconditionFailure ("Expected a Label") 
    } 

    label.font = UIFont(name: "Times New Roman", size: 1.0) 
    label.text = pickerData[row] 
    return label 
} 
+0

Für diejenigen von euch wie mich, die einen Fehler bekommen, als sie diesen Ansatz versuchten, und zu viel Zeit damit verbracht haben, herauszufinden, was falsch war, ein alternativer Ansatz, der funktioniert, ist hier: http://stackoverflow.com/questions/27455345/ uipickerview-wont-allow-changing-font-name-und-size-via-deligents-attractedt – Ben

5

den Namen der Schriftart ändern und Größe können Sie viewForRow und eine zugeschrieben verwenden string:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 

    var label = view as! UILabel! 
    if label == nil { 
     label = UILabel() 
    } 

    var data = pickerData[row] 
    let title = NSAttributedString(string: data!, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(36.0, weight: UIFontWeightRegular)]) 
    label.attributedText = title 
    label.textAlignment = .Center 
    return label 

} 

Und wenn Sie Ihre Schriftgröße größer Sie machen werden die Höhe jeder Zeile mit rowHeightForComponent zu erhöhen:

func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat { 
    return 36.0 
} 
+0

Sie können auch die ersten Zeilen durch ersetzen: label = (als? UILabel anzeigen) ?? UILabel() – RowanPD

18

Für Swift 3

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
    let label = (view as? UILabel) ?? UILabel() 

    label.textColor = .black 
    label.textAlignment = .center 
    label.font = UIFont(name: "SanFranciscoText-Light", size: 18) 

    // where data is an Array of String 
    label.text = pickerData[row] 

    return label 
    } 
2

Für schnellen 2,3

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView{ 

     var label = view as! UILabel! 
     if label == nil { 
      label = UILabel() 
     } 

     label.font = UIFont(name: "Lato-Regular", size: 17)! 
     label.text = dataArray[row] as? String 
     label.textAlignment = .Center 
     return label 

    } 

Für Swift 3

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView{ 

     print("Returning Custom label") 
     var label = view as! UILabel! 
     if label == nil { 
      label = UILabel() 
     } 

     label?.font = UIFont(name: "Lato-Regular", size: 14)! 
     label?.text = dataArray[row] as? String 
     label?.textAlignment = .center 
     return label! 

    } 
4

Wenn Sie t wollen er Picker Label AutoShrink ...

Set adjustsFontSizeToFitWidth=true und minimumScaleFactor=0.5

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 

    var label: UILabel 
    if let view = view as? UILabel { label = view } 
    else { label = UILabel() } 

    label.text = "..." 
    label.textAlignment = .center 
    label.font = UIFont.boldSystemFont(ofSize: 20) 
    label.adjustsFontSizeToFitWidth = true 
    label.minimumScaleFactor = 0.5 

    return label 
} 
Verwandte Themen