2016-06-23 66 views
1

UIPickerViewのフォントサイズにはさまざまな解決策がありますが、それらはすべてテキストベースの配列に基づいているか、UIViewControllerを必要としているようです。 私はUITableViewCell内でInt Arrayを使用していますが、達成しようとしているもので動作するものを見つけることができないようです。UIPickerViewのフォントサイズを調整する

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) 
    { 
    } 
} 

任意の助けをいただければ幸いです。ここ

はコードです。

答えて

1

UIPickerViewDataSourceのviewForRowメソッドでUILabelを使用できます。その後、すべての標準ラベルオプションを使用して設定することができます。フォントサイズ、色などの設定:

// 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

これは私の答えとどう違うのですか? – Ike10

+0

Caxix、私は...を削除し、正常に動作します。唯一の問題は、私が "C"または "F"記号を失ったことです。どのように私はそれらを戻すことができますか? –

+0

私は、else節のケースで自分の答えを更新しました。あなたはおそらくカスタム色、整列などでいくつかの追加の書式設定をしたいでしょう。 – caxix

1

あなたはそうのようなあなたのUITableViewCellサブクラス内UIPickerViewDelegate機能viewForRowを使用する必要があります。

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は、あなたのプロトタイプのセルまたは外部のペン先のいずれかを使用してUITableViewサブクラスセットとコントロールドラッグでごUIPickerViewため@IBOutletです。また、pickerdelegatedataSourceプロパティはawakeFromNibに設定してください。

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

これは、選択したフォントのUILabelでセル幅のpickerViewを作成する必要があります。

+0

ありがとう、Ike。私はこれを試しましたが、 "label.text = degrees [row]"は、 'int'型の値を 'string'型に割り当てることができないというエラーを返します –

+0

残念です。私の編集を参照してください。 @DavidSanford。数値を文字列としてキャストする必要があります。 – Ike10

+0

これは、intがStringエラーに修正されている点で非常に優れています。しかし、今、いくつかの奇妙な理由で、何も表示されません。私はフォント名に "Arial"を追加しましたが、まだ運がありません。 –

関連する問題