iPad и UIPickerView (или UIDatePickerView) - PullRequest
2 голосов
/ 29 апреля 2010

Кому-нибудь повезло с использованием UIPicker в 3.2 SDK? Я в процессе переноса приложения iPhone на iPad, и это единственное, что я не могу заставить работать. Я пытался ...

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

-Создание указанного выше листа действий, превращение его в общий вид ViewController, добавление этого VC к UIPopover

-Сделать только пикап представлением универсального ViewController, добавив этот VC в UIPopover

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

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

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

Ответы [ 6 ]

3 голосов
/ 04 мая 2010

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

Мэтью Кейси - Учебное пособие: Введение в Pop Over Control на iPad

Короче говоря, на iPad ЕДИНСТВЕННЫЙ способ показать, что сборщик находится внутри элемента управления popover. Совместное использование данных между контроллером представления содержимого popover (контроллер представления представления средства выбора) и контроллером представления основного приложения - это бит, который я не мог понять. (То есть получение метода «didSelectRow» средства выбора для воздействия на объект в контроллере основного представления, скажем, UITextField или UIButton.) Это выполняется путем создания пользовательского протокола для пересылки метода «didSelectRow» в контроллер основного представления.

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

2 голосов
/ 15 августа 2012

Если вы хотите обмениваться данными между контроллерами представления ... решение - 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;
}

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

В противном случае смотрите здесь для получения дополнительной информации о обмене данными между контроллерами представления

2 голосов
/ 14 мая 2010

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

Пример проекта

1 голос
/ 04 мая 2010

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

1 голос
/ 30 апреля 2010

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

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

0 голосов
/ 25 июля 2011

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

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

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

...