Поделиться через


Создание приложения Xamarin.iOS с помощью API Рефлексия ion

The MT. API Рефлексия ion позволяет классы декорироваться атрибутами, которые MT. D используется для автоматического создания экранов. API отражения предоставляет привязку между этими классами и отображаемыми на экране. Хотя этот API не предоставляет точное управление, которое выполняет API элементов, это снижает сложность, автоматически создавая иерархию элементов на основе оформления класса.

Настройка MT. D

MT. D распространяется с помощью Xamarin.iOS. Чтобы использовать его, щелкните правой кнопкой мыши узел "Ссылки" проекта Xamarin.iOS в Visual Studio 2017 или Visual Studio для Mac и добавьте ссылку на сборку MonoTouch.Dialog-1. Затем добавьте using MonoTouch.Dialog инструкции в исходный код по мере необходимости.

Начало работы с API Рефлексия ion

Использование API Рефлексия ion так же просто, как:

  1. Создание класса, украшенного MT. Атрибуты D.
  2. BindingContext Создание экземпляра, передавая его экземпляр приведенного выше класса.
  3. DialogViewController Создание , передавая его BindingContext’sRootElement .

Рассмотрим пример использования API Рефлексия ion. В этом примере мы создадим простой экран ввода данных, как показано ниже:

В этом примере мы создадим простой экран ввода данных, как показано ниже.

Создание класса с помощью MT. Атрибуты D

Сначала необходимо использовать API Рефлексия ion — это класс, украшенный атрибутами. Эти атрибуты будут использоваться MT. D внутренне для создания объектов из API Элементов. Например, рассмотрим следующее определение класса:

public class Expense
{
    [Section("Expense Entry")]

    [Entry("Enter expense name")]
    public string Name;

    [Section("Expense Details")]

    [Caption("Description")]
    [Entry]
    public string Details;

    [Checkbox]
    public bool IsApproved = true;
}

Это SectionAttribute приведет к разделам создаваемого UITableView объекта с аргументом строки, используемым для заполнения заголовка раздела. После объявления раздела каждое поле, которое следует за ним, будет включено в этот раздел, пока другой раздел не будет объявлен. Тип элемента пользовательского интерфейса, созданного для поля, будет зависеть от типа поля и MT. Атрибут D, украшающий его.

Например, Name поле является полем string , и оно украшено EntryAttribute. Это приводит к добавлению строки в таблицу с полем записи текста и указанным подпись. IsApproved Аналогичным образом поле содержит boolCheckboxAttributeстроку таблицы с проверка box справа от ячейки таблицы. MT. D использует имя поля, автоматически добавляя пробел, чтобы создать подпись в данном случае, так как он не указан в атрибуте.

Добавление BindingContext

Чтобы использовать Expense класс, необходимо создать BindingContext. Это BindingContext класс, который привязывает данные из класса атрибутов для создания иерархии элементов. Чтобы создать его, мы просто создадим его и передаем экземпляр класса атрибутов конструктору.

Например, чтобы добавить пользовательский интерфейс, объявленный с помощью атрибута в Expense классе, добавьте следующий код в FinishedLaunching метод AppDelegate:

var expense = new Expense ();
var bctx = new BindingContext (null, expense, "Create a task");

Затем все, что нам нужно сделать, чтобы создать пользовательский интерфейс, добавить BindingContext его в DialogViewController окно и задать его в качестве RootViewController окна, как показано ниже:

UIWindow window;

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{   
    window = new UIWindow (UIScreen.MainScreen.Bounds);

    var expense = new Expense ();
    var bctx = new BindingContext (null, expense, "Create a task");
    var dvc = new DialogViewController (bctx.Root);

    window.RootViewController = dvc;
    window.MakeKeyAndVisible ();

    return true;
}

Запуск приложения теперь приводит к отображению экрана, показанного выше.

Добавление uiNavigationController

Обратите внимание, что заголовок "Создать задачу", который мы передали в нее BindingContext , не отображается. Это связано с тем, что DialogViewController не является частью UINavigatonController. Давайте изменим код, чтобы добавить UINavigationController его в качестве окна RootViewController, и добавить DialogViewController его в качестве корневого UINavigationController элемента, как показано ниже:

nav = new UINavigationController(dvc);
window.RootViewController = nav;

Теперь при запуске приложения заголовок отображается на UINavigationController’s панели навигации, как показано на снимке экрана ниже:

Теперь при запуске приложения заголовок отображается на панели навигации UINavigationControllers

В том числе UINavigationController, теперь мы можем воспользоваться другими функциями MT. D, для которого необходима навигация. Например, можно добавить перечисление в Expense класс, чтобы определить категорию расходов и MT. D автоматически создаст экран выбора. Чтобы продемонстрировать, измените Expense класс, чтобы включить ExpenseCategory поле следующим образом:

public enum Category
{
    Travel,
    Lodging,
    Books
}

public class Expense
{
    …

    [Caption("Category")]
    public Category ExpenseCategory;
}

Запуск приложения теперь приводит к новой строке в таблице для категории, как показано ниже.

Запуск приложения теперь приводит к новой строке в таблице для категории, как показано ниже.

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

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

Итоги

В этой статье представлено пошаговое руководство по API Рефлексия ion. Мы показали, как добавить атрибуты в класс для управления отображаемыми. Мы также обсудили, как использовать BindingContext данные из класса к созданной иерархии элементов, а также как использовать MT. D с UINavigationController.