Compartilhar via


Markup Json MonoTouch.Dialog

Esta página descreve a marcação Json aceita pelo JsonElement de MonoTouch.Dialog

Vamos começar com um exemplo. Veja a seguir um arquivo Json completo que pode ser passado para JsonElement.

{     
    "title": "Json Sample",
    "sections": [ 
        {
            "header": "Booleans",
            "footer": "Slider or image-based",
            "id": "first-section",
            "elements": [
                { 
                    "type": "boolean",
                    "caption": "Demo of a Boolean",
                    "value": true
                }, {
                    "type": "boolean",
                    "caption": "Boolean using images",
                    "value": false,
                    "on": "favorite.png",
                    "off": "~/favorited.png"
                }, {
                    "type": "root",
                    "title": "Tap for nested controller",
                    "sections": [
                        {
                            "header": "Nested view!",
                            "elements": [
                                {
                                    "type": "boolean",
                                    "caption": "Just a boolean",
                                    "id": "the-boolean",
                                    "value": false
                                }, {
                                    "type": "string",
                                    "caption": "Welcome to the nested controller"
                                }
                            ]
                        }
                    ]
                }
            ]
        }, {
            "header": "Entries",
            "elements" : [
                {
                    "type": "entry",
                    "caption": "Username",
                    "value": "",
                    "placeholder": "Your account username"
                }
            ]
        }
    ]
}

A marcação acima produz a seguinte interface do usuário:

A interface do usuário criada pela marcação fornecida

Cada elemento na árvore pode conter a propriedade "id". Em runtime, é possível fazer referência a seções ou elementos individuais usando o indexador JsonElement. Dessa forma:

var jsonElement = JsonElement.FromFile ("demo.json");

var firstSection = jsonElement ["first-section"] as Section;

var theBoolean = jsonElement ["the-boolean"] as BooleanElement;

Sintaxe do elemento raiz

O elemento Root contém os seguintes valores:

  • title
  • sections (opcional)

O elemento raiz pode aparecer dentro de uma seção como um elemento para criar um controlador aninhado. Nesse caso, a propriedade "type" extra deve ser definida como "root"

url

Se a "url" propriedade estiver definida, se o usuário tocar nesse RootElement, o código solicitará um arquivo da URL especificada e tornará o conteúdo as novas informações exibidas. Você pode usar isso para criar a interface do usuário do servidor com base no que o usuário toca.

group

Se definido, isso define o nome do grupo para o elemento raiz. Os nomes de grupo são usados para escolher um resumo exibido como o valor do elemento raiz de um dos elementos aninhados no elemento . Esse é o valor de uma caixa de seleção ou o valor de um botão de opção.

radioselected

Identifica o item de rádio selecionado em elementos aninhados

título

Se estiver presente, será o título usado para o RootElement

tipo

Deve ser definido como "root" quando isso aparece em uma seção (isso é usado para aninhar controladores).

sections

Esta é uma matriz Json com seções individuais

Sintaxe da seção

A seção contém:

  • header (opcional)
  • footer (opcional)
  • Matriz elements

Se estiver presente, o texto do cabeçalho será exibido como um legenda da seção.

Se estiver presente, o rodapé será exibido na parte inferior da seção.

elementos

Essa é uma matriz de elementos. Cada elemento deve conter pelo menos uma chave, a "type" chave usada para identificar o tipo de elemento a ser criado. Alguns dos elementos compartilham algumas propriedades comuns, como "caption" e "value". Estas são a lista de elementos com suporte:

  • string elementos (com e sem estilo)
  • entry linhas (regular ou senha)
  • boolean valores (usando comutadores ou imagens)

Os elementos de cadeia de caracteres podem ser usados como botões fornecendo um método para invocar quando o usuário toca na célula ou no acessório,

Elementos de renderização

Os elementos de renderização são baseados em StringElement e StyledStringElement em C# e podem renderizar informações de várias maneiras e é possível renderizá-los de várias maneiras. Os elementos mais simples podem ser criados da seguinte maneira:

{
    "type": "string",
    "caption": "Json Serializer"
}

Isso mostrará uma cadeia de caracteres simples com todos os padrões: fonte, plano de fundo, cor do texto e decorações. É possível conectar ações a esses elementos e fazer com que eles se comportem como botões definindo a "ontap" propriedade ou as "onaccessorytap" propriedades:

{
    "type": "string",
    "caption": "View Photos",
    "ontap": "Acme.PhotoLibrary.ShowPhotos"
}

O acima invocará o método "ShowPhotos" na classe "Acme.PhotoLibrary". O "onaccessorytap" é semelhante, mas só será invocado se o usuário tocar no acessório em vez de tocar na célula. Para habilitar isso, você também deve definir o acessório:

{
    "type": "string",
    "caption": "View Photos",
    "ontap": "Acme.PhotoLibrary.ShowPhotos",
    "accessory": "detail-disclosure",
    "onaccessorytap": "Acme.PhotoLibrary.ShowStats"
}

Os elementos de renderização podem exibir duas cadeias de caracteres ao mesmo tempo, uma é a legenda e outra é o valor. A forma como essas cadeias de caracteres são renderizadas depende do estilo, você pode definir isso usando a "style" propriedade . O padrão mostrará o legenda à esquerda e o valor à direita. Consulte a seção sobre estilo para obter mais detalhes. As cores são codificadas usando o símbolo '#' seguido de números hexadecimais que representam os valores para os valores vermelho, verde, azul e talvez alfa. O conteúdo pode ser codificado em formato curto (3 ou 4 dígitos hexadecimais) que representa valores RGB ou RGBA. Ou a forma longa (6 ou 8 dígitos) que representam valores RGB ou RGBA. A versão curta é uma abreviação para gravar o mesmo dígito hexadecimais duas vezes. Portanto, a constante "#1bc" é preterida como red=0x11, green=0xbb e blue=0xcc. Se o valor alfa não estiver presente, a cor será opaca. Alguns exemplos:

"background": "#f00"
"background": "#fa08f880"

acessório

Determina o tipo de acessório a ser mostrado em seu elemento de renderização, os valores possíveis são:

  • checkmark
  • detail-disclosure
  • disclosure-indicator

Se o valor não estiver presente, nenhum acessório será mostrado

background

A propriedade background define a cor da tela de fundo da célula. O valor é uma URL para uma imagem (nesse caso, o downloader de imagem assíncrona será invocado e a tela de fundo será atualizada depois que a imagem for baixada) ou pode ser uma cor especificada usando a sintaxe de cor.

caption

O main cadeia de caracteres a ser mostrada no elemento de renderização. A fonte e a cor podem ser personalizadas definindo as "textcolor" propriedades e "font" . O estilo de renderização é determinado pela "style" propriedade .

color e detailcolor

A cor a ser usada para o texto main ou o texto detalhado.

detailfont e fonte

A fonte a ser usada para o legenda ou o texto detalhado. O formato de uma especificação de fonte é o nome da fonte seguido opcionalmente por um traço e o tamanho do ponto. Veja a seguir as especificações de fonte válidas:

  • "Helvetica"
  • "Helvetica-14"

linebreak

Determina como as linhas são divididas. Os valores possíveis são:

  • character-wrap
  • clip
  • head-truncation
  • middle-truncation
  • tail-truncation
  • word-wrap

E character-wrap podem ser usados junto com a "lines" propriedade definida como zero para transformar o elemento de renderização em um elemento de várias linhasword-wrap.

ontap e onaccessorytap

Essas propriedades devem apontar para um nome de método estático em seu aplicativo que usa um objeto como um parâmetro. Ao criar sua hierarquia usando os métodos JsonDialog.FromFile ou JsonDialog.FromJson, você pode passar um valor de objeto opcional. Esse valor de objeto é então passado para seus métodos. Você pode usar isso para passar algum contexto para seu método estático. Por exemplo:

class Foo {
    Foo ()
    {
        root = JsonDialog.FromJson (myJson, this);
    }

    static void Callback (object obj)
    {
        Foo myFoo = (Foo) obj;
        obj.Callback ();
    }
}

lines

Se isso for definido como zero, ele tornará o elemento de tamanho automático dependendo do conteúdo das cadeias de caracteres contidas. Para que isso funcione, você também deve definir a "linebreak" propriedade como "character-wrap" ou "word-wrap".

estilo

O estilo determina o tipo de estilo de célula que será usado para renderizar o conteúdo e eles correspondem aos valores de enumeração UITableViewCellStyle. Os valores possíveis são:

  • "default"
  • "value1"
  • "value2"
  • "subtitle" : texto com um subtítulo.

subtitle

O valor a ser usado para o subtítulo. Esse é um atalho para definir o estilo "subtitle" como e definir a "value" propriedade como uma cadeia de caracteres. Isso faz ambos com uma única entrada.

Textcolor

A cor a ser usada para o texto.

value

O valor secundário a ser mostrado no elemento de renderização. O layout disso é afetado pela configuração "style" . A fonte e a cor podem ser personalizadas definindo o "detailfont" e "detailcolor"o .

Elementos boolianos

Os elementos boolianos devem definir o tipo como "bool", pode conter um "caption" a ser exibido e o "value" é definido como true ou false. Se as "on" propriedades e "off" estiverem definidas, elas serão consideradas imagens. As imagens são resolvidas em relação ao diretório de trabalho atual no aplicativo. Se você quiser referenciar arquivos relativos a pacotes, poderá usar o "~" como um atalho para representar o diretório do pacote de aplicativos. Por exemplo "~/favorite.png" , será o favorite.png contido no arquivo de pacote. Por exemplo:

{ 
    "type": "boolean",
    "caption": "Demo of a Boolean",
    "value": true
},

{
    "type": "boolean",
    "caption": "Boolean using images",
    "value": false,
    "on": "favorite.png",
    "off": "~/favorited.png"
}

type

O tipo pode ser definido como "boolean" ou "checkbox". Se definido como booliano, ele usará um UISlider ou imagens (se ambos "on" e "off" estiverem definidos). Se definido como caixa de seleção, ele usará uma caixa de seleção. A "group" propriedade pode ser usada para marcar um elemento booliano como pertencente a um grupo específico. Isso será útil se a raiz que contém também tiver uma "group" propriedade, pois a raiz resumirá os resultados com uma contagem de todos os boolianos (ou caixas de seleção) que pertencem ao mesmo grupo.

Elementos de entrada

Você usa elementos de entrada para permitir que o usuário insira dados. O tipo para elementos de entrada é "entry" ou "password". A "caption" propriedade é definida como o texto a ser mostrado à direita e o "value" é definido como o valor inicial para o qual definir a entrada. O "placeholder" é usado para mostrar uma dica ao usuário para entradas vazias (é mostrado esmaecido). Estes são alguns exemplos:

{
    "type": "entry",
    "caption": "Username",
    "value": "",
    "placeholder": "Your account username"
}, {
    "type": "password",
    "caption": "Password",
    "value": "",
    "placeholder": "You password"
}, {
    "type": "entry",
    "caption": "Zip Code",
    "value": "01010",
    "placeholder": "your zip code",
    "keyboard": "numbers"
}, {
    "type": "entry",
    "return-key": "route",
    "caption": "Entry with 'route'",
    "placeholder": "captialization all + no corrections",
    "capitalization": "all",
    "autocorrect": "no"
}

Autocorreção

Determina o estilo de correção automática a ser usado para a entrada. Os valores possíveis são true ou false (ou as cadeias de caracteres "yes" e "no").

Capitalização

O estilo de capitalização a ser usado para a entrada. Os valores possíveis são:

  • all
  • none
  • sentences
  • words

caption

O legenda a ser usado para a entrada

teclado

O tipo de teclado a ser usado para entrada de dados. Os valores possíveis são:

  • ascii
  • decimal
  • default
  • email
  • name
  • numbers
  • numbers-and-punctuation
  • twitter
  • url

espaço reservado

O texto da dica que é mostrado quando a entrada tem um valor vazio.

chave de retorno

O rótulo usado para a chave de retorno. Os valores possíveis são:

  • default
  • done
  • emergencycall
  • go
  • google
  • join
  • next
  • route
  • search
  • send
  • yahoo

value

O valor inicial da entrada

Elementos de rádio

Os elementos de rádio têm o tipo "radio". O item selecionado é escolhido pela radioselected propriedade em seu elemento raiz que contém. Além disso, se um valor for definido para a "group" propriedade , esse botão de opção pertencerá a esse grupo.

Elementos de data e hora

O elemento tipos "datetime"e "date""time" são usados para renderizar datas com horários, datas ou horas. Esses elementos assumem como parâmetros um legenda e um valor. O valor pode ser escrito em qualquer formato compatível com a função .NET DateTime.Parse. Exemplo:

"header": "Dates and Times",
"elements": [
    {
        "type": "datetime",
        "caption": "Date and Time",
        "value": "Sat, 01 Nov 2008 19:35:00 GMT"
    }, {
        "type": "date",
        "caption": "Date",
        "value": "10/10"
    }, {
        "type": "time",
        "caption": "Time",
        "value": "11:23"
    }                       
]

Elemento Html/Web

Você pode criar uma célula que, quando tocada, inserirá uma UIWebView que renderiza o conteúdo de uma URL especificada, local ou remota usando o "html" tipo . As duas únicas propriedades para esse elemento são "caption" e "url":

{
    "type": "html",
    "caption": "Miguel's blog",
    "url": "https://tirania.org/blog" 
}