2016-06-23 2 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

감사합니다. 이것을 시도했지만 "label.text = degrees [row]"는 'int'유형의 값을 'string'유형에 할당 할 수 없다는 오류를 반환합니다. –

+0

죄송합니다. 내 편집을 참조하십시오. @DavidSanford. 숫자를 문자열로 형변환해야합니다. – Ike10

+0

int가 String 오류로 수정되어 훨씬 개선되었습니다. 그러나 지금, 어떤 이상한 이유로, 아무것도 표시되지 않습니다. 나는 글꼴 이름에 "Arial"을 추가했지만 여전히 운이 없다. –