2015-11-11 34 views
5

拾取器的尺寸隨着目標C,我用下面所示的代碼來設置拾取器的/改變字體系列和大小:改變字體及其在迅速

- (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; 
} 

然而,夫特不接受從UIView的轉換爲的UILabel,所以我不能走這條道路,其看起來像如下圖所示:

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 
} 

第一stament(讓標籤....)throuws在運行時異常:

EXC-BAD INSTRUCTION(代碼= EXC_I386_INVOP,子碼=爲0x0)

+0

此鏈接[鏈接] http://stackoverflow.com/questions/27455345/uipickerview-wont-allow-changing-font-名稱和大小 - 通過代表 - 大小限制[>鏈接]解決了這個問題。 –

回答

1

更慣用夫特編碼將是:

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

對於那些喜歡我的人在嘗試這種方法時遇到了錯誤,並且花費了太多時間來弄清楚什麼是錯誤的,另一種工作方式在這裏:http://stackoverflow.com/questions/27455345/ uipickerview-wont-allow-changing-font-name-and-size-via-delegates-attributedt – Ben

5

要更改字體名稱和大小可以用viewForRow和歸因字符串:

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 

} 

如果你讓你的字體大小,你會想增加與rowHeightForComponent每一行的高度:

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

你也可以用第一行代替:let label =(view as?UILabel)?的UILabel() – RowanPD

18

對於斯威夫特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

爲SWIFT 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 

    } 

對於斯威夫特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

如果你想牛逼他選擇器標籤自動收縮...

adjustsFontSizeToFitWidth=trueminimumScaleFactor=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 
}