Один ViewController с несколькими представлениями в MonoTouch - PullRequest
0 голосов
/ 19 августа 2011

У меня есть приложение для iPad, у которого есть основной ViewController и его основной вид, как обычно, но у меня есть несколько оверлеев (реализованных как отдельные виды).Я хочу, чтобы все эти виды контролировались / принадлежали контроллеру основного вида.

Набор наложенных видов упакован в один XIB (только для целей разработки IB, без кода) и загружается вручную изконтроллер основного представления и приведенный к соответствующему классу View для каждого из них, реализованный в виде отдельного файла .cs для каждого.

Все работает нормально, но поскольку в представлениях XIB для владельца установлен основной класс ViewController(для генерации кода конструктора для событий, выходов) он также генерирует атрибут Register для класса контроллера основного представления, который сопоставляется с тем же атрибутом регистра, уже сгенерированным в файле конструктора XIB контроллера основного представления.

Мой вопрос: есть ли способ запретить MonoTouch / IB автоматически генерировать атрибут Register для представлений XIB?

Спасибо, Педро

Я использую XCode / IB 3.2.6, MonoTouch 4.0.5, MonoDevelop 2.4.2, MonoFramework 2.10.4

1 Ответ

0 голосов
/ 21 августа 2011

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

Я реализовал свой контроллер основного вида вXIB / код позади и назвал его MainBaseViewController.Он имеет только минимальные элементы пользовательского интерфейса, потому что он будет в основном визуальным контейнером для всех других представлений.Затем я создал класс в отдельном файле .cs с именем MainViewController (унаследованным от (MainBaseViewController), который является частичным классом для подключения к коду конструктора, сгенерированному представлениями XIB. Этот класс будет содержать всю логику контроллера представленияЕдинственным недостатком является то, что любые элементы пользовательского интерфейса (выходы) в MainBaseViewController будут сгенерированы как закрытые MonoTouch, и мне нужно было создать некоторые защищенные средства доступа в реализации класса, но это нормально, потому что это только выход представления (но это может бытьпроблема, если базовая XIB имела много элементов управления).

Resuming:

  • Класс MainBaseViewController и XIB будут иметь защищенные средства доступа для любых выходов и только базовый контейнер пользовательского интерфейса длядругие представления в приложении.

  • MainViewController представляет собой файл .cs и является частичным классом, который наследуется от MainBaseViewController, реализует всю логику контроллера представления (управляет всеми другими представлениями)

  • Представления хранятся в XIB MainViews (без кода), а владельцем файла представлений является класс MainViewController, который генерирует все выходы и события, доступные из класса MainViewController.

  • Отдельные файлы .cs реализуют каждую конкретную логику для каждого представления, содержащегося в представлениях XIB и которое создается, когда основной контроллер динамически загружает представления из представлений XIB.

Это решение позволяет хранить представления в отдельном файле, логику контроллера представления в другом (кроме пользовательского интерфейса) и специальную логику представления sepa

Какие-либо другие решения или лучший шаблон проектирования?Другим более простым вариантом было бы просто вставить все виды в основной контроллер XIb, потеряв независимость контроллера и видов.

Спасибо, Педро

...