Markup JSON per MonoTouch.Dialog

Questa pagina descrive il markup Json accettato da JsonElement di MonoTouch.Dialog

Iniziamo con un esempio. Di seguito è riportato un file JSON completo che può essere passato a 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"
                }
            ]
        }
    ]
}

Il markup precedente produce l'interfaccia utente seguente:

The UI created by the given markup

Ogni elemento nell'albero può contenere la proprietà "id". In fase di esecuzione è possibile fare riferimento a singole sezioni o elementi usando l'indicizzatore JsonElement. nel modo seguente:

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

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

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

Sintassi dell'elemento radice

L'elemento Root contiene i valori seguenti:

  • title
  • sections (facoltativo)

L'elemento radice può essere visualizzato all'interno di una sezione come elemento per creare un controller annidato. In tal caso, la proprietà "type" aggiuntiva deve essere impostata su "root"

URL.

Se la "url" proprietà è impostata, se l'utente tocca questo elemento RootElement, il codice richiederà un file dall'URL specificato e renderà visualizzato il contenuto delle nuove informazioni. È possibile usarlo per creare l'estensione dell'interfaccia utente dal server in base a ciò che l'utente tocca.

group

Se impostato, imposta il nomegruppo per l'elemento radice. I nomi di gruppo vengono usati per selezionare un riepilogo visualizzato come valore dell'elemento radice da uno degli elementi annidati nell'elemento . Si tratta del valore di una casella di controllo o del valore di un pulsante di opzione.

radioselected

Identifica l'elemento di opzione selezionato negli elementi annidati

title

Se presente, sarà il titolo usato per RootElement

type

Deve essere impostato su "root" quando questo viene visualizzato in una sezione (usato per annidare i controller).

sezioni

Si tratta di una matrice Json con singole sezioni

Sintassi della sezione

La sezione contiene:

  • header (facoltativo)
  • footer (facoltativo)
  • Matrice elements

Se presente, il testo dell'intestazione viene visualizzato come didascalia della sezione.

Se presente, il piè di pagina viene visualizzato nella parte inferiore della sezione.

Elementi figlio

Si tratta di una matrice di elementi. Ogni elemento deve contenere almeno una chiave, ovvero la "type" chiave usata per identificare il tipo di elemento da creare. Alcuni elementi condividono alcune proprietà comuni come "caption" e "value". Di seguito è riportato l'elenco degli elementi supportati:

  • string elementi (con e senza stili)
  • entry righe (normale o password)
  • boolean valori (con opzioni o immagini)

Gli elementi stringa possono essere utilizzati come pulsanti fornendo un metodo da richiamare quando l'utente tocca la cella o l'accessorio,

Elementi di rendering

Gli elementi di rendering sono basati su C# StringElement e StyledStringElement e possono eseguire il rendering delle informazioni in vari modi ed è possibile eseguirne il rendering in diversi modi. Gli elementi più semplici possono essere creati come segue:

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

Verrà visualizzata una stringa semplice con tutte le impostazioni predefinite: carattere, sfondo, colore del testo e decorazioni. È possibile associare le azioni a questi elementi e renderle simili ai pulsanti impostando la "ontap" proprietà o le "onaccessorytap" proprietà:

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

Il codice precedente richiama il metodo "Show Foto" nella classe "Acme.PhotoLibrary". è "onaccessorytap" simile, ma verrà richiamato solo se l'utente tocca l'accessorio invece di toccare la cella. Per abilitare questa operazione, è necessario impostare anche l'accessorio:

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

Gli elementi di rendering possono visualizzare due stringhe contemporaneamente, una è la didascalia e un'altra è il valore. Il rendering di queste stringhe dipende dallo stile, è possibile impostarli usando la "style" proprietà . Il valore predefinito mostrerà il didascalia a sinistra e il valore a destra. Per altri dettagli, vedere la sezione relativa allo stile. I colori vengono codificati usando il simbolo '#' seguito da numeri esadecimali che rappresentano i valori per i valori rosso, verde, blu e forse alfa. Il contenuto può essere codificato in forma breve (3 o 4 cifre esadecimali) che rappresenta valori RGB o RGBA. Oppure la forma lunga (6 o 8 cifre) che rappresentano valori RGB o RGBA. La versione breve è una abbreviata per scrivere la stessa cifra esadecimale due volte. La costante "#1bc" viene quindi intepretata come red=0x11, green=0xbb e blue=0xcc. Se il valore alfa non è presente, il colore è opaco. Alcuni esempi:

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

Accessorio

Determina il tipo di accessorio da visualizzare nell'elemento di rendering, i possibili valori sono:

  • checkmark
  • detail-disclosure
  • disclosure-indicator

Se il valore non è presente, non viene visualizzato alcun accessorio

background

La proprietà di sfondo imposta il colore di sfondo per la cella. Il valore è un URL di un'immagine (in questo caso, il downloader di immagini asincrone verrà richiamato e lo sfondo verrà aggiornato dopo il download dell'immagine) oppure può essere un colore specificato usando la sintassi del colore.

caption

Stringa principale da visualizzare nell'elemento di rendering. Il tipo di carattere e il colore possono essere personalizzati impostando le "textcolor" proprietà e "font" . Lo stile di rendering è determinato dalla "style" proprietà .

colore e colore dettaglio

Colore da utilizzare per il testo principale o per il testo dettagliato.

detailfont e font

Tipo di carattere da utilizzare per il didascalia o il testo dei dettagli. Il formato di una specifica del tipo di carattere è il nome del carattere seguito facoltativamente da un trattino e dalla dimensione del punto. Di seguito sono riportate le specifiche valide del tipo di carattere:

  • "Helvetica"
  • "Helvetica-14"

linebreak

Determina il modo in cui le linee vengono suddivise. I valori possibili sono:

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

Sia character-wrap che word-wrap possono essere usati insieme alla "lines" proprietà impostata su zero per trasformare l'elemento di rendering in un elemento a più righe.

ontap e onaccessorytap

Queste proprietà devono puntare a un nome di metodo statico nell'applicazione che accetta un oggetto come parametro. Quando si crea la gerarchia usando i metodi JsonDialog.FromFile o JsonDialog.FromJson, è possibile passare un valore di oggetto facoltativo. Questo valore dell'oggetto viene quindi passato ai metodi. È possibile usarlo per passare un contesto al metodo statico. Ad esempio:

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

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

lines

Se questa proprietà è impostata su zero, la dimensione automatica dell'elemento verrà eseguita in base al contenuto delle stringhe contenute. Per il funzionamento di questa operazione, è necessario impostare anche la "linebreak" proprietà su "character-wrap" o "word-wrap".

style

Lo stile determina il tipo di stile di cella che verrà usato per eseguire il rendering del contenuto e corrispondono ai valori di enumerazione UITableViewCellStyle. I valori possibili sono:

  • "default"
  • "value1"
  • "value2"
  • "subtitle" : testo con un sottotitolo.

subtitle

Valore da usare per il sottotitolo. Si tratta di un collegamento per impostare lo stile su "subtitle" e impostare la "value" proprietà su una stringa. Questa operazione esegue entrambe con una singola voce.

Textcolor

Colore da utilizzare per il testo.

value

Valore secondario da visualizzare nell'elemento di rendering. Il layout di questo oggetto è interessato dall'impostazione "style" . Il tipo di carattere e il colore possono essere personalizzati impostando e "detailfont""detailcolor".

Elementi booleani

Gli elementi booleani devono impostare il tipo su "bool", possono contenere un "caption" oggetto da visualizzare e l'oggetto "value" è impostato su true o false. Se le "on" proprietà e "off" sono impostate, si presuppone che siano immagini. Le immagini vengono risolte in relazione alla directory di lavoro corrente nell'applicazione. Se si desidera fare riferimento a file relativi al bundle, è possibile usare come "~" collegamento per rappresentare la directory del bundle dell'applicazione. Ad esempio "~/favorite.png" , sarà il favorite.png contenuto nel file bundle. Ad esempio:

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

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

type

Il tipo può essere impostato su "boolean" o "checkbox". Se impostato su booleano, userà un UISlider o immagini (se "on" entrambi e "off" sono impostati). Se è impostata su una casella di controllo, verrà usata una casella di controllo. La "group" proprietà può essere utilizzata per contrassegnare un elemento booleano come appartenente a un determinato gruppo. Ciò è utile se la radice contenitore ha anche una "group" proprietà come radice riepilogerà i risultati con un conteggio di tutti i booleani (o caselle di controllo) che appartengono allo stesso gruppo.

Elementi voce

Gli elementi di immissione vengono usati per consentire all'utente di immettere i dati. Il tipo per gli elementi di immissione "entry" è o "password". La "caption" proprietà è impostata sul testo da visualizzare a destra e l'oggetto "value" è impostato sul valore iniziale su cui impostare la voce. Viene "placeholder" usato per visualizzare un suggerimento all'utente per le voci vuote (viene visualizzato in grigio). Di seguito sono riportati alcuni esempi.

{
    "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"
}

correzione automatica

Determina lo stile di correzione automatica da utilizzare per la voce. I valori possibili sono true o false (o le stringhe "yes" e "no").

uso di maiuscole e minuscole

Stile di maiuscola da utilizzare per la voce. I valori possibili sono:

  • all
  • none
  • sentences
  • words

caption

Didascalia da utilizzare per la voce

tasti di scelta

Tipo di tastiera da utilizzare per l'immissione di dati. I valori possibili sono:

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

segnaposto

Testo dell'hint visualizzato quando la voce ha un valore vuoto.

return-key

Etichetta utilizzata per la chiave restituita. I valori possibili sono:

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

value

Valore iniziale per la voce

Elementi radio

Gli elementi radio hanno il tipo "radio". L'elemento selezionato viene selezionato dalla proprietà sull'elemento radioselected radice che lo contiene. Inoltre, se per la "group" proprietà è impostato un valore, questo pulsante di opzione appartiene a tale gruppo.

Elementi di data e ora

I tipi di "datetime""date" elemento e "time" vengono usati per eseguire il rendering delle date con ore, date o ore. Questi elementi accettano come parametri un didascalia e un valore. Il valore può essere scritto in qualsiasi formato supportato dalla funzione .NET DateTime.Parse. Esempio:

"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

È possibile creare una cella che, quando toccata, incorpora un UIWebView che esegue il rendering del contenuto di un URL specificato, locale o remoto usando il "html" tipo . Le uniche due proprietà per questo elemento sono "caption" e "url":

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