2012-05-07 16 views
7

initWithNibName su iOS è intelligente: fa cose come caricare automaticamente NIB diversi per iPad invece di iPhone (anche se molte persone non lo sanno - NON SONO DOCUMENTATI in UIViewController.initWithNibName!).Quali sono le regole per la corrispondenza del nome file initWithNibName?

Ma che altro può fare? Gli unici documenti di Apple che ho trovato per questo spiegano che:

  1. Sarà cercare e trovare i file con ~ ~ ipad o iphone sulla fine del nome
  2. di Apple implica che segue le regole per nome del file immagine automatica corrispondenza

Ma non c'è alcun legame con le regole per la corrispondenza delle immagini, e non riesco a trovare nessuna documentazione esplicite sia per :(

regole potrebbero includere:. "si ottiene un diverso NIB per retina se tu metti @ 2x alla fine del nome del file "(non ho idea se funzioni).

Quello che sto davvero cercando è un elenco di quali regole vengono utilizzate. Risparmierebbe un sacco di hardcoding - ripetuti in quasi ogni singola app che scrivo - se potessi usare di più la loro corrispondenza intelligente del nome (ad esempio se hanno un "pennino landscape landscape vs. load portrait nib")

+0

Ottima domanda!Non sapevo nemmeno delle corrispondenze '~ iphone' e' ~ ipad', dal momento che Apple non sembra utilizzarle nel proprio codice template! Starò a guardare questa domanda! – mbm29414

risposta

2

A rispondere alla tua domanda (principale), queste sono le regole per la corrispondenza nome del file in initWithNibName:

... Tuttavia, se non si specifica un nome pennino, e non l'override del metodo loadview nella sottoclasse personalizzato, il controller della vista cerca per un file di pennino usando altri mezzi. In particolare, cerca un file di pennino con un nome appropriato (senza estensione .nib) e carica quel file di pennino ogni volta che viene richiesta la sua vista. In particolare, sembra (in ordine) per un file punta con uno dei seguenti nomi:

  1. Se il nome della vista classe controller termina con la parola “Controller”, come in MyViewController, esso cerca un file pennino il cui nome corrisponde al nome della classe senza la parola "Controller", come in MyView.nib.
  2. Cerca un file pennino il cui nome corrisponde al nome della classe controller . Ad esempio, se il nome della classe è MyViewController, cerca un file MyViewController.nib.

Dalla documentazione del UIViewController sotto nibName

ma c'è di più ... In realtà il NSBundle hanno alcune regole abbastanza intelligenti per la localizzazione di risorse al suo interno. Here is the documentation page describing these rules (vedere: Risorse specifiche del dispositivo in iOS).

Il che ci porta a to this page che descrive tutti i modificatori (e il modello di base) che possono essere applicati alle risorse di raggruppamento (questo credo sia il collegamento che si sta menzionando riguardo alla corrispondenza del nome file immagine).

+0

Quindi ... leggendo quei link ... non ci sono regole specifiche per i file NIB? Essi ereditano la regola "base" per tutte le risorse (link 1), ma NON hanno regole aggiuntive (link2) - corrette? – Adam

+0

Sì, sarebbe corretto. Un'altra cosa che potrei aggiungere è il caricamento "intelligente" dei file di pennini basato sulla localizzazione. Poiché questo è un argomento molto interessante, chiunque possa aggiungere ulteriori informazioni sarebbe davvero il benvenuto. – Alladinian

Problemi correlati