2015-05-31 3 views
2

Так что у меня есть UIPickerView, который не работает так, как я этого хочу. Он работает правильно примерно 3/4 времени, а другой 1/4 - нет.UIPickerView - выбор неправильной строки-строки

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return listsArray.count 

} 

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView 
{ 
    activeQuizPlace = row 
    var pickerLabel = UILabel() 
    pickerLabel.textColor = UIColor.whiteColor() 
    pickerLabel.text = listsArray[row] 
    pickerLabel.font = UIFont(name: "Georgia", size: 22) 
    pickerLabel.textAlignment = NSTextAlignment.Center 
    return pickerLabel 
} 

Списки элементов содержат 5 элементов (которые представляют собой строки). Строки 0-2 работают корректно в 100% случаев. Однако, когда выбрана строка 3, она иногда говорит, что строка 1 была, и когда выбрана строка 4, она иногда говорит, что строка 2 была. Я думаю, что проблема имеет какое-то отношение к последней функции, которую я контролирую UIPickerView. Я просто скопировал этот код с этого сайта, чтобы изменить цвет и шрифт текста. Прежде чем я использовал эту функцию, у меня никогда не было проблемы с ней или, по крайней мере, ее никто не заметил. Боковое примечание: я использую Xcode 6.3.2

Мне нужен способ для правильной работы сборщика, а также возможность изменения его шрифта и цвета. Я хотел бы помочь с этим, я искал ответы в Интернете в течение 2 часов и не могу понять, что я делаю неправильно, спасибо заранее!

+3

Можете ли вы также опубликовать свой метод didSelectRow? – Surely

+0

Это весь код, который я использую, связанный с представлением выбора. Это мой первый раз, когда я использую представление UIPicker, поэтому я не уверен, что именно я делаю, может быть, не в этом проблема? Я просто получил значение строк в этом последнем методе с activeQuizPlace = row – Jaxon

+0

привет, поэтому, если я не ошибаюсь, вы используете значение activeQuizPlace для получения той строки, которую выбрал пользователь, не так ли? Это неправильный способ сделать это. Чтобы правильно обработать выбор, вам необходимо реализовать протокол UIPickerViewDelegate и реализовать метод didSelectRow. Посмотрите этот учебник: http://sourcefreeze.com/ios-uipickerview-example-using-swift/ – Surely

ответ

2

Мне кажется, вам нужно удалить строку activeQuizPlace = row из кода, который вы указали, а затем добавить эту функцию ниже.

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    activeQuizPlace = row 
} 

Функция, которую использовали не вызывается с индексом, который пользователь выбирает, он вызывается с индексом, что система нуждается для рисования взглядов.

Предлагаемая функция должна быть той, которую вы хотите (надеюсь).

+0

Это исправлено! Спасибо за помощь! – Jaxon

Смежные вопросы