2015-11-11 20 views
5

Với Objective-C, tôi đã sử dụng mã hiển thị bên dưới để thiết lập/thay đổi họ phông chữ và kích thước của một bảng chọn:thay đổi phông chữ và kích thước của nó trong một bảng chọn trong nhanh chóng

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

Tuy nhiên, Swift không chấp nhận một đúc từ UIView để UILabel và do đó tôi không thể đi theo con đường này mà sẽ giống như hình dưới đây:

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 
} 

Các stament đầu tiên (cho phép nhãn ....) throuws một ngoại lệ tại thời gian chạy:

EXC-BAD HƯỚNG DẪN (mã = EXC_I386_INVOP, subcode = 0x0)

+0

Liên kết này [link] http://stackoverflow.com/questions/27455345/uipickerview-wont-allow-changing-font- tên và kích thước-thông qua-đại biểu-attributedt [> liên kết] giải quyết vấn đề. –

Trả lời

1

Một Swift nhiều thành ngữ mã hóa sẽ là:

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

Đối với những người bạn như tôi đã gặp lỗi khi thử phương pháp này và dành quá nhiều thời gian để tìm hiểu xem có gì sai, một cách tiếp cận thay thế không hoạt động ở đây: http://stackoverflow.com/questions/27455345/ uipickerview-wont-allow-changing-font-name-và-size-via-delegates-attributedt – Ben

5

Để thay đổi tên phông chữ và kích thước mà bạn có thể sử dụng viewForRow và gán chuỗi:

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 

} 

Và nếu bạn thực hiện kích thước phông chữ của bạn lớn hơn, bạn sẽ muốn tăng chiều cao của mỗi hàng với rowHeightForComponent:

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

Bạn cũng có thể thay thế một vài dòng đầu tiên bằng: let label = (xem dưới dạng? UILabel) ?? UILabel() – RowanPD

18

Đối 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

Đối nhanh chóng 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 

    } 

Đối 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

Nếu bạn muốn t ông nhãn hộp thoại để AUTOSHRINK ...

Set 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 
} 
Các vấn đề liên quan