Criando um aplicativo Xamarin.iOS usando a API de Reflexão
O MT. D Reflection API permite que as classes sejam decoradas com atributos que MT. D usa para criar telas automaticamente. A API de reflexão fornece uma ligação entre essas classes e o que é exibido na tela. Embora essa API não forneça o controle refinado que a API de elementos fornece, ela reduz a complexidade criando automaticamente a hierarquia de elementos com base na decoração de classe.
Configurando o MT. D
MT. D é distribuído com o Xamarin.iOS. Para usá-lo, clique com o botão direito do mouse no nó Referências de um projeto Xamarin.iOS no Visual Studio 2017 ou Visual Studio para Mac e adicione uma referência ao assembly MonoTouch.Dialog-1 . Em seguida, adicione using MonoTouch.Dialog
instruções em seu código-fonte conforme necessário.
Introdução à API de reflexão
Usar a API de reflexão é tão simples quanto:
- Criando uma classe decorada com MT. D atributos.
- Criando uma
BindingContext
instância, passando a ela uma instância da classe acima. - Criando um
DialogViewController
, passando oBindingContext’s
RootElement
.
Vejamos um exemplo para ilustrar como usar a API de reflexão. Neste exemplo, criaremos uma tela de entrada de dados simples, conforme mostrado abaixo:
Criando uma classe com MT. Atributos D
A primeira coisa que precisamos para usar a API de Reflexão é uma classe decorada com atributos. Esses atributos serão usados pela MT. D internamente para criar objetos a partir da API Elements. Por exemplo, considere a seguinte definição de classe:
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;
}
Isso SectionAttribute
resultará na criação de seções do UITableView
, com o argumento string usado para preencher o cabeçalho da seção. Depois que uma seção for declarada, todos os campos que a seguirem serão incluídos nessa seção, até que outra seção seja declarada.
O tipo de elemento de interface do usuário criado para o campo dependerá do tipo do campo e do MT. D decorando-o.
Por exemplo, o campo é um string
e é decorado Name
com um EntryAttribute
. Isso resulta na adição de uma linha à tabela com um campo de entrada de texto e a legenda especificada. Da mesma forma, o IsApproved
campo é um bool
com um CheckboxAttribute
, resultando em uma linha da tabela com uma caixa de seleção à direita da célula da tabela. MT. D usa o nome do campo, adicionando automaticamente um espaço, para criar a legenda neste caso, uma vez que ela não é especificada em um atributo.
Adicionando o BindingContext
Para usar a Expense
classe, precisamos criar um BindingContext
arquivo . A BindingContext
é uma classe que vinculará os dados da classe atribuída para criar a hierarquia de elementos. Para criar um, simplesmente instanciamos e passamos uma instância da classe atribuída ao construtor.
Por exemplo, para adicionar a interface do usuário que declaramos usando o Expense
atributo na classe, inclua o seguinte código no FinishedLaunching
método do AppDelegate
:
var expense = new Expense ();
var bctx = new BindingContext (null, expense, "Create a task");
Então, tudo o que precisamos fazer para criar a interface do usuário é adicionar o BindingContext
DialogViewController
ao e defini-lo como o RootViewController
da janela, conforme mostrado abaixo:
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;
}
A execução do aplicativo agora resulta na exibição da tela mostrada acima.
Adicionando um UINavigationController
Observe, no entanto, que o título "Criar uma tarefa" que passamos para o BindingContext
não é exibido. Isso ocorre porque o DialogViewController
não faz parte de um UINavigatonController
. Vamos alterar o código para adicionar a UINavigationController
como a janela RootViewController,
e adicionar o DialogViewController
como a raiz do UINavigationController
como mostrado abaixo:
nav = new UINavigationController(dvc);
window.RootViewController = nav;
Agora, quando executamos o aplicativo, o título aparece na UINavigationController’s
barra de navegação, como mostra a captura de tela abaixo:
Ao incluir um UINavigationController
, agora podemos tirar proveito de outros recursos do MT. D para o qual a navegação é necessária. Por exemplo, podemos adicionar uma enumeração à Expense
classe para definir a categoria da despesa e MT. D criará uma tela de seleção automaticamente. Para demonstrar, modifique a Expense
classe para incluir um ExpenseCategory
campo da seguinte maneira:
public enum Category
{
Travel,
Lodging,
Books
}
public class Expense
{
…
[Caption("Category")]
public Category ExpenseCategory;
}
A execução do aplicativo agora resulta em uma nova linha na tabela para a categoria, conforme mostrado:
A seleção da linha faz com que a aplicação navegue para uma nova tela com linhas correspondentes à enumeração, conforme mostrado abaixo:
Resumo
Este artigo apresentou um passo a passo da API de reflexão. Mostramos como adicionar atributos a uma classe para controlar o que é exibido. Também discutimos como usar um para vincular dados de uma classe à hierarquia de elementos que é criada, bem como como usar MT BindingContext
. D com um UINavigationController
.