2014-10-21 1 views
2

UIPickerView에서 다음 코드를 사용하여 행의 글꼴을 변경하려고합니다. 내가 뭘 할지라도 오류가 발생하여 모든 옵션을 다 써 버렸습니다. 나는 그것이 Xcode 결함이라고 생각하는 지점에 가깝다. 모든 아이디어신속한 uipickerview 글꼴

func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { 

    let fontAttributes = [NSFontAttributeName: UIFont(name: "Verdana", size: 5.0)] 

    if (component == FOOD) { 

     let title = NSMutableAttributedString(string: foodArray[row], attributes: fontAttributes) 
     return title 
    } 
    else { 
     let title = NSMutableAttributedString(string: foodArray[row], attributes: fontAttributes) 
     return title 

    } 
} 
+0

어떤 에러가 나나요? – Andrew

+0

"여분의 인수 '문자열이 있습니다. – JBelbute

답변

1

이것은 Swift가 여전히 새로운 언어이므로 컴파일러의 오류 메시지가 좋지 않은 경우입니다.

foodArray[NSObject]이거나 적어도 [String]이 아닌 것으로 가정합니다. 명시 적으로 직접 설정하지 않았다면 Xcode에서 옵션을 클릭하여 유형을 확인하십시오.

문자열 배열로 선언하십시오 :

let foodArray: [String] = // … 

또는

let foodArray = ["inferred", "as", "[String]", "from", "its", "contents"] 

하고이 가능 아니라면, String들로 요소를 검색

:

let title = NSMutableAttributedString(string: foodArray[row] as String, attributes: fontAttributes) 


이 경우에 도움이되지 않을 수도 있지만 이와 같은 이상한 오류 메시지가 표시 될 때 문제를 격리하는 가장 쉬운 방법은 전달하기 전에 모든 인수를 개별적으로 선언하여 단선을 일시적으로 피하는 것입니다. 함수에 넣습니다. 그 전략은 UIView.animateWithDuration으로 많은 도움이되었습니다.

+0

그래서 적어도 아래 코드를 사용하여 컴파일해야합니다. 내가 지금 반대 한 것은 attributedTitleForRow 함수는 전혀 영향을 미치지 않습니다. 비록 애플의 설명서가 아닌 주석에서 찾을 수있을지라도, 애플이 코드 함수를 비활성화했을지도 모른다는 몇 가지 언급을 보았습니다. – JBelbute

2

Apple과 교환 한 후 여기에서 실제로 작동하는 코드가 있습니다. 당신이해야 할 일은 viewForRow 함수를 구현하는 것입니다. 여기에 작동 예제가 있습니다.

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView { 

    var myString = view as UILabel! 

    var myStringLength = 0 

    if(view == nil) { 
     myString = UILabel() 
    } 
    if (component == FOOD) { 
     myString.textAlignment = .Center 

     let rowText = foodArray[row] 

     var attributedRowText = NSMutableAttributedString(string: rowText) 
     var attributedRowTextLength = attributedRowText.length 

     attributedRowText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueColor(), range: NSRange(location: 0, length: attributedRowTextLength)) 

     attributedRowText.addAttribute(NSFontAttributeName, value: UIFont(name: "Helvetica", size: 16.0)!, range: NSRange(location: 0 ,length:attributedRowTextLength)) 

     myString!.attributedText = attributedRowText 

     return myString 
    } 
    else { 
     myString.textAlignment = .Center 

     let rowText = prepArray[row] 

     var attributedRowText = NSMutableAttributedString(string: rowText) 
     var attributedRowTextLength = attributedRowText.length 

     attributedRowText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueColor(), range: NSRange(location: 0, length: attributedRowTextLength)) 

     attributedRowText.addAttribute(NSFontAttributeName, value: UIFont(name: "Helvetica", size: 16.0)!, range: NSRange(location: 0 ,length:attributedRowTextLength)) 

     myString!.attributedText = attributedRowText 

     return myString 

    } 
}