Настройте скин UIPickerView с изображениями

Я занимаюсь разработкой приложения для iPhone. Где, я хочу иметьUIPickerView как на картинке. Можно ли изменить внешний видUIPickerView как это?! Пожалуйста, направьте меня, чтобы сделать это! Я создаю это без XIB.

Или есть способ сделатьUIPickerView кожа прозрачная?

Sample UIPickerView Image

Заранее спасибо!! :-)

Ответы на вопрос(4)

Решение Вопроса

Я не знаю, это правильный путь или нет, но вы можете установить свойUIPickerView Фоновое изображение ... Я сделал это один раз.

Видеть это :-

//Make a view to set as background of UIPickerView
UIView * viewForPickerView = [[UIView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 216.0)];
[viewForPickerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pickerViewBackground.png"]]];

[[[pickerView subviews]objectAtIndex:2] addSubview: viewForPickerView];

//UIPickerView has 8 subviews like, background, rows, container etc.
// hide unnecessary subview

[(UIView*)[[pickerView subviews] objectAtIndex:3] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:5] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:6] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:7] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:8] setHidden:YES];

А теперь добавьтеUILabel только на вашемUIPickerView& APOS; sselectionIndicatorи использоватьlabel какselectionIndicator. you can manage it in your own way.

Спасибо!

 12 июл. 2012 г., 15:09
Хмммммммммм .... :-)
 12 июл. 2012 г., 14:28
@DustinRowland - спасибо :-)
 12 июл. 2012 г., 14:26
Очень хорошее решение
 Nina12 июл. 2012 г., 14:55
Хм ... Похоже, что мой pickerView имеет только 5 подкомпонентов. Завершение работы приложения из-за неперехваченного исключения «NSRangeException», причина: «*** - [__ NSArrayM objectAtIndex:]: индекс 5 за пределами [0 .. 4]»;
 28 янв. 2013 г., 22:01
Причиной, по которой некоторые сборщики показывают 5 подпредставлений, а другие показывают 9, является индикатор выбора. Если это было отключено, у сборщика будет только 5 подпредставлений. Если он включен (по умолчанию), он будет иметь 9.

К сожалению, UIPickerView плохо настраивается, так что вы можете в конечном итоге использовать частные заголовки для изменения внешнего вида (что не рекомендуется) или использовать стороннюю библиотеку, которая имитирует поведение UIPickerView, но допускает настройку.

Посмотри наэти, Может быть не то, что вы хотите, но может помочь тоже :)

 12 июл. 2012 г., 14:14
 Nina12 июл. 2012 г., 13:41
Спасибо за быстрый ответ Vaibhav !! Но я не хочу использовать ничего, кроме UIPickerView :-) Я знаю, что мы могли бы сделать это, используя ALPickerView :-) Я ищу способ настроить UIPickerView !!

UIPickerView - это не что иное, как UIView с одним или несколькими UITableView и фоном и селектором.

Скрытие и добавление представлений в представление UIPicker может привести к поломке вашего кода в будущем, когда Apple решит реализовать его другим способом.

Возможно, было бы лучше реализовать свой элемент управления с помощью UITableView (ов) и собственных настраиваемых фоновых изображений и видов селектора.

Несколько советов по реализации поведения UIPickerView для UITableView:

Use the ContentInset to make sure the first/last row is shown in the middle when scrolled to top/bottom.

On the UITableViewSource implement tableView:didSelectRowAtIndexPath: and call scrollToRowAtIndexPath on the UITableView to show the selected row in the middle.

On the UITableViewSource implement scrollViewDidEndDecelerating and scrollViewDidEndDragging (where willDecelerate is false). Detect the row closest to the middle, set that row to selected and scroll that row to the middle with selectRowAtIndexPath on the UITableView (or scrollToRowAtIndexPath when the row was already selected).

In selectRowAtIndexPath and scrollToRowAtIndexPath set atScrollPosition to TOP. This is a little confusing, because the row is shown in the middle, but the ContentInset pushed the top to the middle of the view.

You can detect the row closest to the middle on the UITableView with the frames of the visibleCells and the contentOffset. The NSIndexPath of the row can be found by applying the same index to indexPathsForVisibleRows.

Ваш ответ на вопрос