XIB-файлы в Xamarin.Mac

В этой статье рассматривается работа с XIB-файлами, созданными в построителе интерфейсов Xcode для создания и обслуживания пользовательских интерфейсов для приложения Xamarin.Mac.

Примечание.

Предпочтительным способом создания пользовательского интерфейса для приложения Xamarin.Mac является раскадровка. Эта документация была оставлена на месте по историческим причинам и для работы со старыми проектами Xamarin.Mac. Дополнительные сведения см. в документации по раскадровкам.

Обзор

При работе с C# и .NET в приложении Xamarin.Mac у вас есть доступ к тем же элементам пользовательского интерфейса и средствам, в которых работает Objective-C разработчик, и Xcode . Так как Xamarin.Mac интегрируется непосредственно с Xcode, вы можете использовать построитель интерфейсов Xcode для создания и поддержания пользовательских интерфейсов (или при необходимости создавать их непосредственно в коде C#).

XIB-файл используется macOS для определения элементов пользовательского интерфейса приложения (таких как меню, Окна, представления, метки, текстовые поля), которые создаются и поддерживаются графически в построителе интерфейсов Xcode.

An example of the running app

В этой статье мы рассмотрим основы работы с XIB-файлами в приложении Xamarin.Mac. Настоятельно рекомендуется сначала ознакомиться со статьей Hello, Mac , так как она охватывает основные понятия и методы, которые мы будем использовать в этой статье.

Возможно, вам потребуется ознакомиться с классами И методами C# вObjective-Cразделе документа Xamarin.Mac Internals, а также объяснить RegisterExport и атрибуты, используемые для подключения классов C# к Objective-C объектам и элементам пользовательского интерфейса.

Общие сведения об Xcode и конструкторе интерфейсов Interface Builder

В рамках Xcode Apple создала средство с именем Interface Builder, которое позволяет визуально создать пользовательский интерфейс в конструкторе. Xamarin.Mac легко интегрируется с конструктором интерфейсов, что позволяет создавать пользовательский интерфейс с теми же инструментами, что Objective-C и пользователи.

Компоненты Xcode

При открытии xib-файла в Xcode из Visual Studio для Mac он открывается с навигатором проекта слева, редактором иерархии интерфейсов и интерфейса в середине и разделом "Свойства и служебные программы" справа:

The components of the Xcode UI

Давайте рассмотрим, что делает каждый из этих разделов Xcode и как вы будете использовать их для создания интерфейса для приложения Xamarin.Mac.

Навигация по проекту

При открытии Xcode-файла Xcode Visual Studio для Mac создает файл проекта Xcode в фоновом режиме для обмена данными об изменениях между собой и Xcode. Позже при переходе на Visual Studio для Mac из Xcode все изменения, внесенные в этот проект, синхронизируются с проектом Xamarin.Mac Visual Studio для Mac.

Раздел "Навигация по проекту" позволяет перемещаться между всеми файлами, составляющими этот проект Xcode . Как правило, вы будете заинтересованы только в XIB-файлах в этом списке, таких как MainMenu.xib и MainWindow.xib.

Иерархия интерфейса

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

Редактор интерфейса

В разделе редактора интерфейсов представлена поверхность, на которой вы графически макетируйте пользовательский интерфейс. Элементы из раздела "Библиотека" раздела "Свойства и служебные программы" будут перетаскиваться, чтобы создать проект. При добавлении элементов пользовательского интерфейса (представлений) в область конструктора они будут добавлены в раздел иерархии интерфейса в том порядке, в который они отображаются в редакторе интерфейса.

Свойства и служебные программы

Раздел "Свойства и служебные программы" разделен на два основных раздела, с которыми мы будем работать, свойства (также называемые инспекторами) и библиотекой:

The Property Inspector

Изначально этот раздел почти пуст, однако при выборе элемента в редакторе интерфейса или иерархии интерфейса раздел "Свойства" будет заполнен сведениями о заданном элементе и свойствах, которые можно настроить.

В разделе Свойства находится восемь разных вкладок инспекторов, как показано на следующем рисунке:

An overview of all Inspectors

Слева направо располагаются следующие вкладки:

  • Инспектор файлов. Инспектор файлов отображает сведения о файле, такие как имя файла и расположение редактируемого XIB-файла.
  • Экспресс-справка. На вкладке "Экспресс-справка" содержится контекстная справка по компоненту или функции, выбранной в Xcode.
  • Инспектор удостоверений. Инспектор удостоверений предоставляет сведения о выбранном элементе управления или представлении.
  • Инспектор атрибутов — инспектор атрибутов позволяет настраивать различные атрибуты выбранного элемента управления или представления.
  • Инспектор размера — инспектор размера позволяет управлять поведением размера и изменения размера выбранного элемента управления или представления.
  • Подключение ions Inspector — инспектор Подключение ions отображает подключения к выходу и действию выбранных элементов управления. Мы рассмотрим точки и действия всего за один момент.
  • Инспектор привязок — инспектор привязок позволяет настраивать элементы управления таким образом, чтобы их значения автоматически привязаны к моделям данных.
  • Инспектор эффектов представления — инспектор эффектов представления позволяет указать эффекты для элементов управления, таких как анимация.

В разделе "Библиотека" можно найти элементы управления и объекты для размещения в конструкторе для графического создания пользовательского интерфейса:

An example of the Library Inspector

Теперь, когда вы знакомы с интегрированной среды разработки Xcode и конструктором интерфейсов, давайте рассмотрим его для создания пользовательского интерфейса.

Создание и обслуживание окон в Xcode

Предпочтительным способом создания пользовательского интерфейса приложения Xamarin.Mac является раскадровка (см. документацию по раскадровкам в разделе "Введение в раскадровки") и, в результате, любой новый проект, запущенный в Xamarin.Mac, будет использовать раскадровки по умолчанию.

Чтобы перейти на использование пользовательского интерфейса на основе XIB, сделайте следующее:

  1. Откройте Visual Studio для Mac и запустите новый проект Xamarin.Mac.

  2. На панели решений щелкните проект правой кнопкой мыши и выберите "Добавить>новый файл" ...

  3. Выберите контроллер Mac>Windows:

    Adding a new Window Controller

  4. Введите MainWindow имя и нажмите кнопку "Создать ":

    Adding a new Main Window

  5. Снова щелкните проект правой кнопкой мыши и выберите команду Добавить>новый файл...

  6. Выберите главное меню Mac>:

    Adding a new Main Menu

  7. Оставьте имя как MainMenu и нажмите кнопку "Создать ".

  8. На панели решения выберите файл Main.storyboard, щелкните правой кнопкой мыши и выберите "Удалить".

    Selecting the main storyboard

  9. В диалоговом окне "Удалить" нажмите кнопку "Удалить ":

    Confirming the deletion

  10. На панели решений дважды щелкните файл Info.plist, чтобы открыть его для редактирования.

  11. Выберите в раскрывающемся MainMenu списке "Основной интерфейс ":

    Setting the main menu

  12. На панели решений дважды щелкните файл MainMenu.xib, чтобы открыть его для редактирования в построителе интерфейсов Xcode.

  13. В инспекторе библиотеки введите object в поле поиска новый объект в область конструктора:

    Editing the main menu

  14. В инспекторе удостоверений введите AppDelegate для класса:

    Selecting the App Delegate

  15. Выберите владельца файла из иерархии интерфейса, переключитесь на инспектор Подключение ion и перетащите строку из делегата AppDelegateв объект, только что добавленный в проект:

    Connecting the App Delegate

  16. Сохраните изменения и вернитесь в Visual Studio для Mac.

При всех этих изменениях измените файл AppDelegate.cs и сделайте его следующим образом:

using AppKit;
using Foundation;

namespace MacXib
{
    [Register ("AppDelegate")]
    public class AppDelegate : NSApplicationDelegate
    {
        public MainWindowController mainWindowController { get; set; }

        public AppDelegate ()
        {
        }

        public override void DidFinishLaunching (NSNotification notification)
        {
            // Insert code here to initialize your application
            mainWindowController = new MainWindowController ();
            mainWindowController.Window.MakeKeyAndOrderFront (this);
        }

        public override void WillTerminate (NSNotification notification)
        {
            // Insert code here to tear down your application
        }
    }
}

Теперь главное окно приложения определяется в XIB-файле автоматически включено в проект при добавлении контроллера окна. Чтобы изменить дизайн окон, на панели решений дважды щелкните файл MainWindow.xib :

Selecting the MainWindow.xib file

Откроется конструктор окон в построителе интерфейсов Xcode:

Editing the MainWindow.xib

Стандартный рабочий процесс окна

Для любого окна, с которым вы создаете и работаете в приложении Xamarin.Mac, процесс в основном одинаков:

  1. Для новых окон, которые не добавляются автоматически в проект, добавьте новое определение окна в проект.
  2. Дважды щелкните XIB-файл, чтобы открыть макет окна для редактирования в построителе интерфейсов Xcode.
  3. Задайте все необходимые свойства окна в инспекторе атрибутов и инспекторе размера.
  4. Перетащите элементы управления, необходимые для сборки интерфейса, и настройте их в инспекторе атрибутов.
  5. Используйте инспектор размера для обработки изменения размера элементов пользовательского интерфейса.
  6. Предоставление элементов пользовательского интерфейса окна коду C# через точки и действия.
  7. Сохраните изменения и вернитесь в Visual Studio для Mac для синхронизации с Xcode.

Проектирование макета окна

Процесс создания пользовательского интерфейса в построителе интерфейсов в основном одинаков для каждого добавляемого элемента:

  1. Найдите нужный элемент управления в инспекторе библиотеки и перетащите его в редактор интерфейса и поместите его.
  2. Задайте все необходимые свойства окна в инспекторе атрибутов.
  3. Используйте инспектор размера для обработки изменения размера элементов пользовательского интерфейса.
  4. Если вы используете пользовательский класс, задайте его в инспекторе удостоверений.
  5. Предоставление элементов пользовательского интерфейса коду C# через точки и действия.
  6. Сохраните изменения и вернитесь в Visual Studio для Mac для синхронизации с Xcode.

Пример:

  1. В Xcode перетащите нажимную кнопку из раздела "Библиотека":

    Selecting a button from the Library

  2. Перетащите кнопку в окно в редакторе интерфейса:

    Adding a button to the window

  3. Щелкните свойство Название в инспекторе атрибутов и измените название кнопки на Click Me:

    Setting the button attributes

  4. Перетащите метку из раздела "Библиотека":

    Selecting a label in the Library

  5. Поместите метку в область Окно рядом с кнопкой в редакторе интерфейса:

    Adding a label to the window

  6. Захватите правый маркер метки и перетаскивайте его до границы окна:

    Resizing the label

  7. Если метка по-прежнему выбрана в редакторе интерфейса, перейдите к инспектору размера:

    Selecting the Size Inspector

  8. В поле автозапуска щелкните красную скобку в правом углу, а в центре — димно-красная горизонтальная стрелка:

    Editing the Autosizing properties

  9. Это гарантирует, что метка будет растянуться и уменьшиться по мере изменения размера окна в работающем приложении. Красные скобки и верхняя и слева от поля "Автозапись коробки" сообщают метке, что она застряла в заданных расположениях X и Y.

  10. Сохранение изменений в пользовательском интерфейсе

При изменении размера и перемещении элементов управления вокруг вы должны были заметить, что конструктор интерфейсов предоставляет полезные подсказки, основанные на рекомендациях по интерфейсу OS X Human Interface. Эти рекомендации помогут вам создать высококачественные приложения, которые будут иметь знакомый внешний вид и чувствовать себя для пользователей Mac.

Если вы посмотрите в разделе "Иерархия интерфейса" , обратите внимание, как отображается макет и иерархия элементов, составляющих наш пользовательский интерфейс:

Selecting an element in the Interface Hierarchy

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

Дополнительные сведения о работе с Windows в приложении Xamarin.Mac см. в нашей документации по Windows .

Предоставление элементов пользовательского интерфейса коду C#

После завершения разработки внешнего вида пользовательского интерфейса в Конструкторе интерфейсов необходимо предоставить элементы пользовательского интерфейса, чтобы получить доступ к коду C#. Для этого вы будете использовать действия и точки.

Настройка пользовательского контроллера главного окна

Чтобы создать точки и действия для предоставления элементов пользовательского интерфейса коду C#, приложению Xamarin.Mac потребуется использовать пользовательский контроллер окна.

Выполните следующие действия.

  1. Откройте раскадровку приложения в конструкторе интерфейсов Xcode.

  2. NSWindowController Выберите область конструктора.

  3. Перейдите в представление инспектора удостоверений и введите WindowController имя класса:

    Editing the class name

  4. Сохраните изменения и вернитесь к Visual Studio для Mac для синхронизации.

  5. Файл WindowController.cs будет добавлен в проект на панели решения в Visual Studio для Mac:

    The new class name in Visual Studio for Mac

  6. Откройте раскадровку в построителе интерфейсов Xcode.

  7. Файл WindowController.h будет доступен для использования:

    The matching .h file in Xcode

Точки и действия

Итак, что такое выходы и действия? В традиционном программировании пользовательского интерфейса .NET добавляемый элемент управления в пользовательском интерфейсе автоматически предоставляется как свойство. В Mac это работает по-другому — простое добавление элемента управления в представление не делает его доступным для кода. Необходимо явно предоставить элемент пользовательского интерфейса в код. Для этого Apple предоставляет нам два варианта:

  • Переменные экземпляров. Они аналогичны свойствам. Если вы подключаете элемент управления к выходу, он предоставляется коду через свойство, поэтому вы можете выполнять такие действия, как присоединение обработчиков событий, вызов методов в нем и т. д.
  • Действия. Они аналогичны командам в WPF. Например, когда действие выполняется на элементе управления, скажем, нажатие кнопки, элемент управления автоматически вызовет метод в коде. Действия являются мощными и удобными, так как можно подключить множество элементов управления к одному и тому же действию.

В Xcode точки и действия добавляются непосредственно в код с помощью перетаскивания элемента управления. В частности, это означает, что для создания выхода или действия вы выбираете элемент управления, который вы хотите добавить выход или действие, удерживая кнопку control на клавиатуре, и перетащите этот элемент управления непосредственно в код.

Для разработчиков Xamarin.Mac это означает, что вы перетащите Objective-C в заглушки файлы, соответствующие файлу C#, в котором требуется создать выход или действие. Visual Studio для Mac создал файл с именем MainWindow.h в рамках проекта Shim Xcode, созданного для использования построителя интерфейсов:

An example of a .h file in Xcode

Этот файл stub .h зеркало MainWindow.designer.cs, который автоматически добавляется в проект Xamarin.Mac при создании новогоNSWindow. Этот файл будет использоваться для синхронизации изменений, внесенных конструктором интерфейсов, и здесь мы создадим точки и действия, чтобы элементы пользовательского интерфейса предоставлялись коду C#.

Добавление выхода

С основным пониманием того, какие точки и действия являются, давайте рассмотрим создание выходов для предоставления элемента пользовательского интерфейса коду C#.

Выполните следующие действия.

  1. В Xcode в правом верхнем углу экрана нажмите кнопку с изображением двойного круга, чтобы открыть вспомогательный редактор:

    Selecting the Assistant Editor

  2. Xcode переключится в комбинированный режим, где в одной стороне находится редактор интерфейса, а в другой — редактор кода.

  3. Обратите внимание, что Xcode автоматически выбрал файл MainWindowController.m в редакторе кода, который является неверным. Если вы помните из нашего обсуждения о том, какие точки и действия выше, нам нужно выбрать MainWindow.h .

  4. В верхней части редактора кода щелкните "Автоматическая ссылка" и выберите файл MainWindow.h:

    Selecting the correct .h file

  5. Теперь в Xcode должен быть выбран правильный файл:

    The correct file selected

  6. Последнее действие было очень важным! Если у вас нет правильного файла, вы не сможете создавать точки и действия, или они будут предоставляться неправильному классу в C#!

  7. В редакторе интерфейса удерживайте клавишу CONTROL на клавиатуре и перетащите метку, созданную выше, в редактор кода чуть ниже @interface MainWindow : NSWindow { } кода:

    Dragging to create a new Outlet

  8. Откроется диалоговое окно. Оставьте значение Подключение ion выходом и введите ClickedLabel имя:

    Setting the Outlet properties

  9. Нажмите кнопку Подключение, чтобы создать выход:

    The completed Outlet

  10. Сохраните изменения в файле.

Добавление действия

Далее давайте рассмотрим создание действия для предоставления пользовательского взаимодействия с элементом пользовательского интерфейса в коде C#.

Выполните следующие действия.

  1. Убедитесь, что мы все еще в редакторе помощника, а файл MainWindow.h отображается в редакторе кода.

  2. В редакторе интерфейса удерживайте клавишу CONTROL на клавиатуре и перетащите кнопку, созданную выше, в редактор кода чуть ниже @property (assign) IBOutlet NSTextField *ClickedLabel; кода:

    Dragging to create an Action

  3. Измените тип Подключение ion на действие:

    Select an Action type

  4. Введите ClickedButton в поле Имя:

    Configuring the Action

  5. Нажмите кнопку Подключение, чтобы создать действие:

    The completed Action

  6. Сохраните изменения в файле.

С помощью проводного пользовательского интерфейса и предоставления кода C# переключитесь на Visual Studio для Mac и позвольте синхронизировать изменения из Xcode и Interface Builder.

Написание кода

С помощью пользовательского интерфейса, созданного и его элементов пользовательского интерфейса, предоставляемых кодом через точки и действия, вы готовы написать код, чтобы обеспечить жизнь программы. Например, откройте файл MainWindow.cs для редактирования, дважды щелкнув его на панели решения:

The MainWindow.cs file

И добавьте следующий код в MainWindow класс, чтобы работать с примером выхода, созданного выше:

private int numberOfTimesClicked = 0;
...

public override void AwakeFromNib ()
{
    base.AwakeFromNib ();

    // Set the initial value for the label
    ClickedLabel.StringValue = "Button has not been clicked yet.";
}

Обратите внимание, что NSLabel доступ к нему осуществляется в C# по прямому имени, назначенному в Xcode при создании выхода в Xcode, в данном случае вызывается ClickedLabel. Доступ к любому методу или свойству предоставленного объекта можно получить так же, как любой обычный класс C#.

Внимание

Необходимо использовать AwakeFromNibвместо другого метода, например Initialize, так как AwakeFromNib вызывается после загрузки и создания экземпляра пользовательского интерфейса из XIB-файла. Если вы попытались получить доступ к элементу управления меток до полной загрузки и создания экземпляра файла XIB, вы получите ошибку NullReferenceException , так как элемент управления метками еще не будет создан.

Затем добавьте следующий частичный класс в MainWindow класс:

partial void ClickedButton (Foundation.NSObject sender) {

    // Update counter and label
    ClickedLabel.StringValue = string.Format("The button has been clicked {0} time{1}.",++numberOfTimesClicked, (numberOfTimesClicked < 2) ? "" : "s");
}

Этот код присоединяется к действию, созданному в Xcode и конструкторе интерфейсов, и будет вызываться в любой момент, когда пользователь нажимает кнопку.

Некоторые элементы пользовательского интерфейса автоматически имеют встроенные действия, например элементы в строке меню по умолчанию, например элемент меню Open... (openDocument:). На панели решения дважды щелкните файл AppDelegate.cs, чтобы открыть его для редактирования и добавить следующий код под методомDidFinishLaunching:

[Export ("openDocument:")]
void OpenDialog (NSObject sender)
{
    var dlg = NSOpenPanel.OpenPanel;
    dlg.CanChooseFiles = false;
    dlg.CanChooseDirectories = true;

    if (dlg.RunModal () == 1) {
        var alert = new NSAlert () {
            AlertStyle = NSAlertStyle.Informational,
            InformativeText = "At this point we should do something with the folder that the user just selected in the Open File Dialog box...",
            MessageText = "Folder Selected"
        };
        alert.RunModal ();
    }
}

Ниже приведена ключевая строка, в ней говорится[Export ("openDocument:")]NSMenu, что AppDelegate имеет методvoid OpenDialog (NSObject sender), который отвечает на openDocument: действие.

Дополнительные сведения о работе с меню см. в нашей документации по меню.

Синхронизация изменений с Xcode

При переходе на Visual Studio для Mac из Xcode все изменения, внесенные в Xcode, будут автоматически синхронизированы с проектом Xamarin.Mac.

Если выбрать MainWindow.designer.cs на панели решений, вы увидите, как наши выходы и действия были подключены в коде C#:

Synchronizing Changes with Xcode

Обратите внимание на то, как два определения в файле MainWindow.designer.cs :

[Outlet]
AppKit.NSTextField ClickedLabel { get; set; }

[Action ("ClickedButton:")]
partial void ClickedButton (Foundation.NSObject sender);

В соответствии с определениями в файле MainWindow.h в Xcode:

@property (assign) IBOutlet NSTextField *ClickedLabel;
- (IBAction)ClickedButton:(id)sender;

Как видно, Visual Studio для Mac прослушивает изменения в H-файле, а затем автоматически синхронизирует эти изменения в соответствующем файле .designer.cs, чтобы предоставить их приложению. Вы также можете заметить, что MainWindow.designer.cs является частичным классом, поэтому Visual Studio для Mac не нужно изменять MainWindow.cs, что перезаписывает любые изменения, внесенные в класс.

Как правило, вам никогда не придется открывать MainWindow.designer.cs себя, он был представлен здесь только для образовательных целей.

Внимание

В большинстве случаев Visual Studio для Mac автоматически увидит все изменения, внесенные в Xcode, и синхронизирует их с проектом Xamarin.Mac. В ситуации, если синхронизация не выполняется автоматически, вернитесь в Xcode и еще раз вернитесь в Visual Studio для Mac. Обычно эти действия запускают цикл синхронизации.

Добавление нового окна в проект

Помимо основного окна документа, приложению Xamarin.Mac может потребоваться отобразить другие типы окон для пользователя, например настройки или панели инспекторов. При добавлении нового окна в проект всегда следует использовать окно Какао с параметром контроллера , так как это упрощает загрузку окна из XIB-файла.

Чтобы добавить новое окно, сделайте следующее:

  1. На панели решений щелкните проект правой кнопкой мыши и выберите "Добавить>новый файл"...

  2. В диалоговом окне "Создать файл" выберите окно Какао Xamarin.Mac>с контроллером:

    Adding an new Window Controller

  3. Введите в поле Имя значение PreferencesWindow и нажмите кнопку Новый.

  4. Дважды щелкните файл PreferencesWindow.xib , чтобы открыть его для редактирования в Конструкторе интерфейсов:

    Editing the window in Xcode

  5. Проектирование интерфейса:

    Designing the windows layout

  6. Сохраните изменения и вернитесь к Visual Studio для Mac для синхронизации с Xcode.

Добавьте следующий код в AppDelegate.cs , чтобы отобразить новое окно:

[Export("applicationPreferences:")]
void ShowPreferences (NSObject sender)
{
    var preferences = new PreferencesWindowController ();
    preferences.Window.MakeKeyAndOrderFront (this);
}

Строка var preferences = new PreferencesWindowController (); создает новый экземпляр контроллера окна, который загружает окно из XIB-файла и увеличивает его. В preferences.Window.MakeKeyAndOrderFront (this); строке отображается новое окно для пользователя.

При запуске кода и выборе параметров в меню приложения откроется окно:

Screenshot shows the Preferences window displayed from the Application Menu.

Дополнительные сведения о работе с Windows в приложении Xamarin.Mac см. в нашей документации по Windows .

Добавление нового представления в проект

Иногда проще разбить дизайн окна на несколько управляемых XIB-файлов. Например, например, переключение содержимого основного окна при выборе элемента панели инструментов в окне параметров или переключении содержимого в ответ на выбор исходного списка .

При добавлении нового представления в проект всегда следует использовать представление Какао с параметром контроллера , так как это упрощает загрузку представления из XIB-файла.

Чтобы добавить новое представление, сделайте следующее:

  1. На панели решений щелкните проект правой кнопкой мыши и выберите "Добавить>новый файл"...

  2. В диалоговом окне "Новый файл" выберите представление Какао Xamarin.Mac>с контроллером:

    Adding a new view

  3. Введите в поле Имя значение SubviewTable и нажмите кнопку Новый.

  4. Дважды щелкните файл SubviewTable.xib , чтобы открыть его для редактирования в конструкторе интерфейсов и конструкторе пользовательского интерфейса:

    Designing the new view in Xcode

  5. Подключите все необходимые действия и выходы.

  6. Сохраните изменения и вернитесь к Visual Studio для Mac для синхронизации с Xcode.

Затем измените SubviewTable.cs и добавьте следующий код в файл AwakeFromNib , чтобы заполнить новое представление при загрузке:

public override void AwakeFromNib ()
{
    base.AwakeFromNib ();

    // Create the Product Table Data Source and populate it
    var DataSource = new ProductTableDataSource ();
    DataSource.Products.Add (new Product ("Xamarin.iOS", "Allows you to develop native iOS Applications in C#"));
    DataSource.Products.Add (new Product ("Xamarin.Android", "Allows you to develop native Android Applications in C#"));
    DataSource.Products.Add (new Product ("Xamarin.Mac", "Allows you to develop Mac native Applications in C#"));
    DataSource.Sort ("Title", true);

    // Populate the Product Table
    ProductTable.DataSource = DataSource;
    ProductTable.Delegate = new ProductTableDelegate (DataSource);

    // Auto select the first row
    ProductTable.SelectRow (0, false);
}

Добавьте перечисление в проект для отслеживания отображения представления. Например, SubviewType.cs:

public enum SubviewType
{
    None,
    TableView,
    OutlineView,
    ImageView
}

Измените XIB-файл окна, который будет использовать представление и отобразить его. Добавьте пользовательское представление, которое будет выступать в качестве контейнера для представления после загрузки в память кодом C# и предоставьте его выходу:ViewContainer

Creating the required Outlet

Сохраните изменения и вернитесь к Visual Studio для Mac для синхронизации с Xcode.

Затем измените файл .cs окна, который будет отображать новое представление (например, MainWindow.cs) и добавьте следующий код:

private SubviewType ViewType = SubviewType.None;
private NSViewController SubviewController = null;
private NSView Subview = null;
...

private void DisplaySubview(NSViewController controller, SubviewType type) {

    // Is this view already displayed?
    if (ViewType == type) return;

    // Is there a view already being displayed?
    if (Subview != null) {
        // Yes, remove it from the view
        Subview.RemoveFromSuperview ();

        // Release memory
        Subview = null;
        SubviewController = null;
    }

    // Save values
    ViewType = type;
    SubviewController = controller;
    Subview = controller.View;

    // Define frame and display
    Subview.Frame = new CGRect (0, 0, ViewContainer.Frame.Width, ViewContainer.Frame.Height);
    ViewContainer.AddSubview (Subview);
}

Когда необходимо отобразить новое представление, загруженное из XIB-файла в контейнере окна ( пользовательское представление , добавленное выше), этот код обрабатывает удаление существующего представления и переключение его на новое. Он выглядит так, чтобы он уже отображался, если он удаляет его с экрана. Далее он принимает представление, которое было передано (как загружено из контроллера представления) изменяет его размер, чтобы он соответствовал области содержимого и добавляет его в содержимое для отображения.

Чтобы отобразить новое представление, используйте следующий код:

DisplaySubview(new SubviewTableController(), SubviewType.TableView);

При этом создается новый экземпляр контроллера представления для отображения нового представления, задает его тип (как указано в перечислении, добавленном в проект) и использует DisplaySubview метод, добавленный в класс Окна, для фактического отображения представления. Например:

Screenshot shows Table View selected in the Working with Images window.

Дополнительные сведения о работе с Windows в приложении Xamarin.Mac см. в нашей документации по Windows и Диалоговым окнам .

Итоги

В этой статье подробно рассматривается работа с XIB-файлами в приложении Xamarin.Mac. Мы видели различные типы и использование XIB-файлов для создания пользовательского интерфейса приложения, создания и обслуживания xib-файлов в построителе интерфейсов Xcode и способах работы с Xcode-файлами в коде C#.