Создание приложения Xamarin.iOS с помощью API отражения
The MT. API отражения D позволяет классы декорироваться атрибутами, которые MT. D используется для автоматического создания экранов. API отражения предоставляет привязку между этими классами и отображаемыми на экране. Хотя этот API не предоставляет точное управление, которое выполняет API элементов, это снижает сложность, автоматически создавая иерархию элементов на основе оформления класса.
Настройка MT. D
МТ. D распространяется с помощью Xamarin.iOS. Чтобы использовать его, щелкните правой кнопкой мыши узел "Ссылки" проекта Xamarin.iOS в Visual Studio 2017 или Visual Studio для Mac и добавьте ссылку на сборку MonoTouch.Dialog-1. Затем добавьте using MonoTouch.Dialog
инструкции в исходный код по мере необходимости.
Начало работы с API отражения
Использование API отражения так же просто, как:
- Создание класса, украшенного MT. Атрибуты D.
BindingContext
Создание экземпляра, передавая его экземпляр приведенного выше класса.DialogViewController
Создание , передавая егоBindingContext’s
RootElement
.
Рассмотрим пример использования API отражения. В этом примере мы создадим простой экран ввода данных, как показано ниже:
Создание класса с помощью MT. Атрибуты D
Первое, что необходимо использовать API отражения, — это класс, украшенный атрибутами. Эти атрибуты будут использоваться 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
, поле содержит bool
CheckboxAttribute
строку таблицы с флажком справа от ячейки таблицы. МТ. 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
панели навигации, как показано на снимке экрана ниже:
В том числе UINavigationController
, теперь мы можем воспользоваться другими функциями MT. D, для которого необходима навигация. Например, можно добавить перечисление в Expense
класс, чтобы определить категорию расходов и MT. D автоматически создаст экран выбора. Чтобы продемонстрировать, измените Expense
класс, чтобы включить ExpenseCategory
поле следующим образом:
public enum Category
{
Travel,
Lodging,
Books
}
public class Expense
{
…
[Caption("Category")]
public Category ExpenseCategory;
}
Запуск приложения теперь приводит к новой строке в таблице для категории, как показано ниже.
Выбор строки приводит к переходу приложения на новый экран со строками, соответствующими перечислению, как показано ниже:
Итоги
В этой статье представлено пошаговое руководство по API отражения. Мы показали, как добавить атрибуты в класс для управления отображаемыми. Мы также обсудили, как использовать BindingContext
данные из класса к созданной иерархии элементов, а также как использовать MT. D с UINavigationController
.