2014-10-21 5 views
2

Я пытаюсь изменить шрифт строк в UIPickerView и использовать следующий код. Независимо от того, что я делаю, я получаю ошибки и исчерпал каждый вариант. Я почти в точке, где, я думаю, это дефект Xcode. Любые идеиSwift uipickerview font

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

есть строка «Дополнительный аргумент». Поэтому я получил ее, по крайней мере, для компиляции с использованием приведенного ниже кода. То, что я сейчас против, состоит в том, что даже не кажется, что атрибутTitleForRow функция имеет какое-либо влияние. Я видел некоторые ссылки, которые Apple, возможно, отключила функцию кода, хотя я могу только найти это в комментариях, а не в любой документации Apple. – 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 

    } 
}