Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
BindingContextinstância, passando a ela uma instância da classe acima. - Criando um
DialogViewController, passando oBindingContext’sRootElement.
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 BindingContextarquivo . 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.



