2010-04-29 5 views
2

Неужели кому-нибудь повезло с использованием UIPicker в 3.2 SDK? Я нахожусь в середине переноса приложения iPhone на iPad, и это единственное, что я не могу заставить работать. Я пробовал ...iPad и UIPickerView (или UIDatePickerView)

-Создание листа действий, добавление выбора в качестве подзаголовка и отображение его.

-Создания, что выше лист действий, что делает его вид типичный ViewController, добавив, что КИ к UIPopover

-Изготовления только Picker точки зрения общего ViewController, добавив, что КИ к UIPopover

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

Просто хотел проверить, удалось ли кому-либо выполнить это, и если да, то каким образом.

Спасибо всем!

ответ

2

Я автор учебника, упомянутого выше. Чтобы сборщик работал в popover и добавлял выбранное значение в текстовое поле в главном представлении, вам нужно использовать протоколы. Я создал образец проекта, чтобы показать это. Я скоро создам учебник по этому вопросу.

Sample Project

+0

Я вижу, что вложенный вами проект содержит папку «build», которая вносит значительный вклад, хотя и необязательно, в размер файла zip-файла. Удалите папку сборки и повторно загрузите, когда сможете. Размер zip-файла уменьшился до 1,9 МБ с 4,2 МБ, удалив папку сборки. –

1

Вы используете интерфейс Builder? Гораздо проще создать новый подкласс UIViewController в Xcode с файлом nib, а затем перетащить его в UIPicker. Затем вам нужно представить контроллер вида в popover. Листы действий не предназначены для просмотра, поэтому не делайте этого.

Я сделал это: см. Третий снимок экрана в C64 Paint.

3

Я просто боролся с этим около 24 часов и получил его для работы, следуя этому руководству, и где бы он ни упоминал свой UITableView, просто подумайте о своем UIPickerView и замените соответствующую информацию.

Matthew Casey - Tutorial: Introduction to Pop Over Control on iPad

Короче говоря, на IPad, единственный способ, вы можете показать на сборщика находится внутри элемента управления поповер. Обмен данными между контроллером представления содержимого popover (диспетчером представления вида выбора) и контроллером представления основного приложения - это бит, который я не мог понять. (т. е. получение метода «didSelectRow» сборщика для воздействия на объект в вашем основном контроллере представления, например UITextField или UIButton.) Это обрабатывается путем создания настраиваемого протокола для пересылки метода «didSelectRow» на главный контроллер представления.

Я никоим образом не эксперт в этом деле, поэтому я пошел шаг за шагом с этим учебником, и он работал в конце. Прежде чем я нашел этот учебник, я был потерян. (Я также переношу приложение iPhone на iPad.)

+2

Ссылка несуществующая. – aerique

1

Спасибо за ответы всем. Поэтому, хотя я не могу сказать, в чем была начальная проблема, я начал эту проблему с нуля и заставил ее работать. Я сделал совершенно новые View Controllers и показал их в Popover, и он работал хорошо. Кажется, это одна из самых сложных точек создания универсального приложения.

0

UIPickerView будет работать, если вы создаете его на IPad, если вы создаете его так:

UIPickerView* pickerView = [[UIPickerView alloc]initWithFrame: CGRectMake (someX, someY, 320, 216)]; 

Некоторые другие размеры появляются работать.Но CGRectZero не работает на iPad - даже если он работает в iPhone.

2

Если вы хотите обмениваться данными между контроллерами представлений ... это решение NSNotificationCenter.

Я знаю, что это не дает ответа на вопрос в целом, но если я хочу, чтобы обмениваться данными между контроллерами зрения: В передающем контроллере представления

NSMutableDictionary *toshare = [[NSMutabledictionary alloc] init]; 
[toshare setValue:valueToShare forKey:@"shared"]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"imSharing" withObject:nil userInfo:(NSDictionary *)toshare]; 

В контроллере Принимающий вид: место в viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imSharing:) name:@"imSharing" object:nil]; 

затем добавить эту функцию:

-(void)imSharing:(NSNotification *)notification { 
     NSDictionary *dictionary = [notification userInfo]; 
     //do something with [dictionary objectForKey:@"shared"]; 
     dictionary = nil; 
} 

Это работает для обмена данными между двумя контроллерами представлений ... ну, в любом случае, небольшие объемы данных.

В противном случае смотрите здесь больше о sharing data between view controllers