Monodevelop 2.8, XCode 3.2.6, Интерфейсный Разработчик: Розетки и Действия - PullRequest
5 голосов
/ 08 октября 2011

РЕДАКТИРОВАТЬ: Поскольку я еще не установил XCode 4, я хотел бы знать, полностью ли совместим MD 2.8 с XCode 3.2.6 или нет. В частности, могу ли я подключить розетки и действия с помощью новой процедуры, описанной в документации MT ?

Я только что установил MonoDevelop (MD) 2.8. Кажется, не работает, я ожидал.

В MD 2.6 , когда я создаю новый UIViewController, этот контроллер представлен следующим образом:

  • Controller.xib
    • Controller.xib.cs
    • Controller.xib.designer.cs

Кроме того, если я открою xib-файл Controller.xib, откроется только Interface Builder (IB). Если я добавлю розетки в xib, они будут видны в Controller.xib.designer.cs.

В MD 2.8 , когда я создаю новый UIViewController, этот контроллер представлен следующим образом:

  • Controller.xib <- больше внутри одного дерева </li>
  • Controller.cs
    • Controller.designer.cs

Итак, у меня есть два файла вместо одного.

Кроме того, если я открою xib-файл, откроются Controller.xib, IB и Xcode. Если я добавляю розетки в xib, они не видны в конструкторе.

Есть предложения?

1 Ответ

6 голосов
/ 09 октября 2011

MonoDevelop 2.8 представил новую модель Xib Designer для поддержки Xcode 4.

Интерфейсный Разработчик, интегрированный в Xcode 4, больше не поддерживает определение классов, выходов и действий в файлах xib. Это означает, что MonoDevelop больше не может использовать модель, в которой он генерировал файлы * .xib.designer.cs из файлов XIB. Вместо этого Интерфейсный Разработчик читает выходы и действия из исходного кода Objective C. Решением MonoDevelop является синхронизация классов C # с заглушками Objective-C.

Когда вы открываете файл xib из MonoDevelop 2.8, MonoDevelop создает временный проект Xcode с заглушками Objective-C, отражающими все классы C #, которые выставлены Objective-C, то есть классы, которые наследуются от NSObject и явно зарегистрированы с помощью [Register("SomeName")] атрибут. Затем он открывает файл xib в контексте этого проекта, так что Interface Builder увидит все доступные типы, а также выходы и действия над ними. Если выходы и действия добавляются в Xcode 4, используя его систему перетаскивания, они автоматически импортируются обратно в файлы * .designer.cs в MonoDevelop.

Это означает, что файлы конструктора больше не генерируются из какого-либо другого файла, а являются фактическим местом хранения информации. Теперь файлы конструктора связаны с классом, а не с xib.

Эта новая модель имеет несколько плюсов поверх поддержки Xcode 4:

  • Теперь возможно, что несколько файлов XIB относятся к одному и тому же классу.
  • Проект содержит все ресурсы контента и другие файлы xib, поэтому на них можно легко ссылаться из Interface Builder
  • Интерфейсный конструктор будет «видеть» выходы, написанные на частях класса пользователя C # и базовых классах, а не только на частях класса конструктора.

Кроме того, теперь гораздо проще писать розетки вручную. Просто примените атрибут Outlet к свойству, например

[Outlet ("someView")]
UIView SomeView {get; set; }

К сожалению, новая модель означает, что MonoDevelop больше не интегрируется с созданием торговых точек и действий в Interface Builder 3.2.x. Я рекомендую вам перейти на Xcode 4. Загрузка и редактирование проектов pre-MD 2.8 должны работать нормально.

Пожалуйста, смотрите http://docs.xamarin.com/ios/tutorials/transitioning_from_xcode_3_to_xcode_4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...