iPad, интерфейс, подобный App Store, предложения по управлению элементами

#ios #ipad #uiscrollview #app-store

#iOS #iPad #uiscrollview #app-store

Вопрос:

Я пытаюсь создать пользовательский интерфейс, подобный тому, который представлен в приложении App Store (устройство iPad). Это своего рода прокручиваемая сетка (горизонтальная прокрутка), где каждый элемент содержит обзор приложения, которое можно продать в app Store (каждый элемент состоит из изображения, заголовка и так далее). Моя цель та же. Я заинтересован в разработке UIScrollView, в котором элементы упорядочены и отображаются. Каждый элемент пользовательского интерфейса состоит из изображения и описания.

Исходя из предыдущих соображений, я разработал ItemViewController.h / .m и relative.xib (ItemView.xib). Каждый элемент может реагировать на такие действия, как нажатие. ItemViewController.m управляет этим нажатием, поскольку он является владельцем его файла. Элемент создается с помощью метода initWithNibNamad в классе MainViewController.h / .m . Этот класс содержит UIScrollView. Затем представление, связанное с элементом, добавляется в UIScrollView.

Поскольку возможно иметь более одного элемента, не могли бы вы дать мне несколько советов по управлению элементами ItemViewController в MainViewController? Должен ли я хранить каждую ссылку на ItemViewController в словаре (например)? В первый момент я также подумал о том, чтобы установить MainViewController в качестве владельца файла ItemView.xib, но я думаю, что проблема управления элементами может остаться.

Заранее благодарю вас. Надеюсь, все понятно.

Ответ №1:

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

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

Обратите внимание, что при таком расположении один элемент в вашей модели может быть представлен в интерфейсе несколько раз. Допустим, вы представляете список элементов, помеченных как «Гигантские», и список элементов, помеченных как «Зеленые». Если бы у вас был продукт «Веселый зеленый гигант», он был бы представлен в обоих списках. Но поскольку один и тот же элемент в вашей модели является источником для обоих, любые изменения в одном автоматически отражаются в другом. Обычно это желаемое поведение (если вы удалили «Веселый зеленый гигант» из «Зеленого» списка, вы также хотите, чтобы он был удален из списка «Гигант»).

Для получения дополнительной информации ознакомьтесь с шаблоном Model View Controller (MVC).

Ответ №2:

Взгляните на AQGridView — он должен быть более чем способен делать то, что вам нужно.

Комментарии:

1. Спасибо за ваш ответ. Могу ли я создать с помощью AQGridView тот же компонент, который я описал ранее?