2016-06-23 22 views
1

Ich sehe viele Lösungen für die UIPickerView Schriftgröße, aber es scheint, dass sie alle auf textbasierten Arrays basieren und/oder einen UIViewController erfordern. Ich benutze ein Int-Array innerhalb einer UITableViewCell und kann scheinbar nichts finden, was mit dem, was ich erreichen will, funktioniert. HierAnpassen UIPickerView Schriftgröße

ist der Code:

import UIKit 


class AirTemperatureTableViewCell: UITableViewCell, UIPickerViewDelegate, UIPickerViewDataSource 

{ 
    let numberOfComponents: Int    = 2 
    let temperatureComponentRows: Int  = 501 
    let temperatureSymbolComponentRows: Int = 2 

    let Fahrenheit: String     = "F" 
    let Celsius: String      = "C" 
    let minDegrees       = -250 
    let maxDegrees       = 250 

    private var degrees: Array<Int>   = [Int]() 

    var temperature: Int     = 30 // our default temperature 
    var temperatureType: String    = "C" // our default type is Celsius 

    @IBOutlet var airTemperaturePicker: UIPickerView! 

    override func awakeFromNib() 
    { 
     super.awakeFromNib() 


     for i in self.minDegrees ..< self.maxDegrees+1 
     { 
      self.degrees.append(i) 
     } 

     self.airTemperaturePicker.selectRow(280, inComponent: 0, animated: true) 
    } 


    override func setSelected(selected: Bool, animated: Bool) 
    { 
     super.setSelected(selected, animated: animated) 
    } 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int 
    { 
     return self.numberOfComponents 
    } 


    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    { 
     if component == 0 
     { 
      return self.temperatureComponentRows 
     } 
     else 
     { 
      return self.temperatureSymbolComponentRows 
     } 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    { 
     // 
     // If we are component 0, the degrees, return the value for the given row. 
     // 
     if component == 0 
     { 
      return String(self.degrees[row]) 
     } 
     else 
     { 
      if row == 0 
      { 
       return self.Celsius 
      } 
      else 
      { 
       return self.Fahrenheit 
      } 
     } 
    } 


    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    { 
    } 
} 

jede mögliche Hilfe würde geschätzt.

Antwort

1

Sie können ein UILabel mit der viewForRow-Methode der UIPickerViewDataSource verwenden. Sie können es dann mit allen normalen Label-Optionen inkl. Einstellung Schriftgröße, Farbe, etc .:

// goes in lieu of titleForRow if customization is desired 
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 

    let pickerLabel = UILabel() 

    if component == 0 { 

     pickerLabel.textColor = .darkGrayColor() 
     pickerLabel.textAlignment = .Center 
     pickerLabel.text = String(self.degrees[row]) 
     pickerLabel.font = UIFont(name:"Helvetica", size: 28) 
    } else { 

     pickerLabel.textColor = .redColor() 
     pickerLabel.textAlignment = .Center 
     pickerLabel.font = UIFont(name:"Helvetica", size: 28) 

     if row == 0 { 
      pickerLabel.text = self.Celsius 
     } else { 
      pickerLabel.text = self.Fahrenheit 
     } 
    } 
    return pickerLabel 
} 
+0

Wie unterscheidet sich das deutlich von meiner Antwort von meiner Antwort? – Ike10

+0

Caxix, ich entfernte die ... und es funktioniert gut. Das einzige Problem ist, dass ich mein "C" - oder "F" -Symbol verloren habe. Wie kann ich sie zurück bekommen? –

+0

Ich aktualisierte meine Antwort mit diesen Fällen in der else-Klausel. Wahrscheinlich möchten Sie zusätzliche Formatierungen mit benutzerdefinierten Farben, Ausrichtungen usw. vornehmen. – caxix

1

Sie sollen die wie so UIPickerViewDelegate Funktion viewForRow in Ihrer UITableViewCell Unterklasse verwenden:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 
    let view = UIView(frame: picker.frame) 
    let label = UILabel(frame: picker.frame) 
    label.textAlignment = .Center 
    label.text = String(degrees[row]) 
    label.font = UIFont(name: "Arial", size: 15) 
    label.adjustsFontSizeToFitWidth = true 
    view.addSubview(label) 

    return view 
} 

picker ein @IBOutlet für Ihre UIPickerView in Ihrem UITableView Unterklasse Satz ist entweder die Prototyp Zelle oder externe Feder und Steuertaste verwenden. Stellen Sie außerdem sicher, dass die pickerdelegate und dataSource Eigenschaften in awakeFromNib festgelegt sind.

override func awakeFromNib() { 
    super.awakeFromNib() 
    picker.dataSource = self 
    picker.delegate = self 
    //Your Code Below 
} 

Dies sollte eine Zellenbreite pickerView mit einem UILabel Ihrer Schriftart Wahl machen.

+0

Danke, Ike. Ich habe das versucht, aber die "label.text = Grad [row]" gibt einen Fehler, dass ich einen Wert vom Typ 'int' zu einem Typ 'String' –

+0

nicht zuordnen kann Sorry etwas ausgelassen. Sieh dir meine Änderungen an. @DavidSanford. Sie müssen die Nummer als String darstellen. – Ike10

+0

Viel besser darin, dass dies den Int String Fehler behoben. Aber jetzt, aus irgendeinem seltsamen Grund, wird nichts angezeigt. Ich fügte dem Schriftartnamen "Arial" hinzu und immer noch kein Glück. –