UIViewControllers в UIScrollViews: что я не правильно понимаю? - PullRequest
2 голосов
/ 19 августа 2011

Я начну свой вопрос, заявив, что я пытаюсь сделать в своем приложении:

Я пытаюсь создать экран «выбора» документа, похожий на «Страницы» или «Номера» на iPad, что-то похожее на это:

enter image description here

Я хотел бы иметь UIScrollView, в который я добавляю подпредставления; эти подпредставления могут иметь элементы управления, такие как сегментированный элемент управления «Сортировка» даты / имени в Pages / Numbers, или они могут быть изображениями документов. Неважно, что отображают подпредставления - я хотел бы, чтобы подпредставления были представлениями с поддержкой UIViewControllers. Здесь начинается мое замешательство.

Видите, я изначально пытался построить экран выбора документов, используя UITableView. По разным причинам, выходящим за рамки этого вопроса, это не сработало. В рамках этой работы я создал UITableViewCell подклассы (и сопровождающие XIB) в соответствии с этого руководства (Создание пользовательского UITableViewCell в iOS 4) . Я подумал, что это здорово - у меня есть представления, которые я могу показать в UITableView, и у меня есть способ получить события из этих представлений таким способом (sortTypeChanged реагирует на изменение выбора в моем Дата / Имя сегментированного контроля):

@interface DocSortViewController : UITableViewCell {
}

-(IBAction)sortTypeChanged:(id)sender;
@end

Все было хорошо, пока я не понял, что UITableView не получит мне то, что я хотел. Поэтому я отказался от него в пользу UIScrollVIew. Тем не менее, именно здесь мои нынешние знания меня подводят. "использовать контроллер представления / представление XIB" парадигма для пользовательского UITableViewCells, похоже, не работает для UIScrollViews.

Я не могу понять, как создать отдельный контроллер представления и сопровождающий XIB, который я могу загрузить и отобразить в моем UIScrollView. Попытки загрузить XIB через UINib.instantiateWithOwner и добавить свойство view контроллера представления в качестве сбоя подпредставления. Я не уверен почему.

Что меня беспокоит, так это то, что мне кажется, что я в корне не понимаю, как работают контроллеры / представления. Особенно в сочетании с UIScrollViews.

Чего мне не хватает? Кто-нибудь пытался сделать что-то похожее на это? Есть ли рекомендуемая лучшая практика для этого? Если вы не должны загружать контроллеры / XIB представления в UIScrollViews, что вы тогда должны делать? Как бы вы получили события от элементов управления на подвиды, проживающие в UIScrollView?

Редактировать: Я должен добавить, что часть моей проблемы заключается в том, что я смотрю на это через призму WPF, где, используя шаблон MVVM, вы создадите полное представление, составив его меньших представлений, каждый со своей собственной моделью представления назад. Реально ли воспроизвести это в iOS? Или это не очень рекомендуется?

1 Ответ

2 голосов
/ 22 августа 2011

В iOS «контроллер представления» - это особая сущность, которая обычно контролирует количество подпредставлений всего экрана (исключение составляют UISplitViewController и UIPopoverController на iPad).Учебник, на который вы ссылаетесь, ошибочен, когда говорит вам создать Xib контроллера представления для UITableViewCells.То, что вы должны были сделать, это создать xib для вашего подкласса UITableViewCell, без участия контроллера представления.На первый взгляд, все остальное кажется более или менее правильным.

Вы можете делать то же самое с UIScrollView, за исключением того, что у вас нет удобного tableView:cellForRowAtIndexPath: метода, чтобы сообщить вам, когдасоздать подпредставления из XIB.Без вашего сообщения о фактической ошибке, которую вы получаете, когда она «падает», я могу только догадываться, но я предполагаю, что любой объект, который вы предоставляете как владелец для instantiateWithOwner:options:, не соответствует ожидаемому пером.Объект, который вы передаете в качестве владельца, должен быть экземпляром любого класса, указанного владельцем, как в кончике.

...