2012-04-05 6 views
7

Mi scuso se questa è una domanda stupida, ma ho fatto qualche ricerca su google e ho cercato SO e non ho trovato nessuno a fare questa domanda esatta.Crea un singolo .xib per l'app universale in Interface Builder? (iOS)

Sto sviluppando iOS da qualche tempo, ma sono completamente nuovo per Interface Builder. Quello che voglio sapere è questo: c'è un modo per creare solo UN file .xib e quindi usarlo per iPhone e iPad in un'applicazione universale?

Mi sembra sciocco doverli creare separatamente; perché due volte il lavoro si espande più di una volta in Interface Builder quando potrei farlo una volta (con piccoli aggiustamenti per le dimensioni dello schermo) nel codice?

Per favore fatemi sapere se mi manca/incomprensione qualcosa qui. Come ho detto, sono un principiante dell'interfaccia Builder completo :)

MODIFICA: Ho presentato giochi non-interface-builder all'App Store in passato, dove le versioni di iPhone e iPad erano identiche, quindi non sono preoccupato di rendere il gioco diverso da ogni dispositivo. Intendo che abbiano esattamente lo stesso aspetto, a parte qualche lieve cambiamento di posizione dovuto alla differenza di proporzioni.

risposta

10

Se si conosce l'aspetto risultante, in base all'autorizzazione, è possibile utilizzare solo uno .xib. Può tornare utile se la vista è solo una sorta di componente condiviso che autorizza come vuoi. Tuttavia, se hai bisogno che la vista abbia un aspetto diverso su iPad che su iPhone, usa solo due .xib s.E 'possibile quindi caricare quella appropriata se necessario, ad esempio in caso di inizializzazione, come -init di questo controllore:

- (id)init 
{ 
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) 
    { 
     self = [super initWithNibName:@"YourNibForPad" bundle:nil]; 
    } 
    else 
    { 
     self = [super initWithNibName:@"YourNibForPhone" bundle:nil]; 
    } 
    if (self) { /* initialize other ivars */ } 
    return self; 
} 
+0

Puoi spiegare ulteriormente, per favore? Capisco come caricare i file separatamente, ma non vorrei. Quando creo una nuova applicazione basata sulla vista, crea automaticamente uno xib separato per iPad e iPhone. Come posso usarne uno e collegarlo a entrambi i dispositivi? Grazie! – WendiKidd

+1

Se davvero, davvero, hai davvero bisogno di questo, basta eliminare l'altro xib e mantenere quello di cui avrai bisogno e passare il suo nome come parametro a '-initWithNibName: bundle:'. Assicurati anche che la vista caricata da quel xib si comporti bene su entrambi i dispositivi, come le regole di autoresizing e così via. – themarketka

+0

Brillante! Questo e 'esattamente quello che stavo cercando; Ora mi sento un po 'sciocco per non averlo capito da solo. Grazie mille per la tua risposta! Questo era quello che mi serviva :) – WendiKidd

3

Il motivo principale per cui gli XIB sono file separati è perché Apple ritiene che le interfacce utente progettate per iPhone/iPod touch e iPad debbano essere adattate a ciascuna rispettivamente. Gli fa eco nella loro loro iOS App Programming Guide, che dice quanto segue:

Per le viste, la modifica principale è quello di ridisegnare i tuoi vista layout per supportare lo schermo più grande. Il semplice ridimensionamento delle visualizzazioni esistenti può funzionare ma spesso non produce i risultati migliori. La tua nuova interfaccia dovrebbe utilizzare lo spazio disponibile e sfruttare i nuovi elementi dell'interfaccia, se necessario. È più probabile che ciò si traduca in un'interfaccia più naturale per l'utente e non solo per un'app per iPhone su uno schermo più grande.

Mentre può prendere tempo per mantenere due XIBs per quello che è effettivamente un'interfaccia utente, ritengo che sia più semplice rispetto all'utilizzo di un XIB e poi dover collegare la maggior parte dei vostri elementi dell'interfaccia utente, al fine di spostarli a livello di codice quando viene caricato quel XIB. Dopotutto, con almeno due XIB è possibile vedere l'aspetto di ciascuna UI, quindi apportare facilmente modifiche visive.

Per inciso, non dimenticare gli storyboard di iOS 5 (read about them here), che semplificano molto la gestione di una gerarchia di controller vista/vista.

+0

Apprezzo l'informazione e la prenderò sotto consiglio. Tuttavia, esiste un modo per sviluppare solo un file .xib? Personalmente ritengo che la citata citazione di Apple sia più pertinente alle applicazioni che ai giochi (e sto lavorando con i giochi). Quindi, mentre apprezzo e capisco quello che stai dicendo, vorrei sapere se è possibile (e se sì, come) caricare sia l'iPhone che l'iPad da uno .xib. Non ho intenzione di cambiare la mia interfaccia tra i due dispositivi nei miei giochi, quindi ... sembra una perdita di tempo duplicare il lavoro. – WendiKidd

+0

Hai intenzione di disegnare direttamente in una vista usando Quartz o un altro metodo di disegno? –

+0

O forse è meglio che sappiamo esattamente cosa farà la tua interfaccia utente e se sarà pesante con elementi IB di serie che richiederanno la connessione. –

0

Se si utilizza IB, è necessario creare 2 file xib separati per iPhone e iPad. È necessario un iPad xib separato per rendere la tua app conforme alle linee guida UI di Apple iPad.

+0

So che non è vero, perché in passato ho inviato app non-interface-builder allo store in cui le versioni di iPhone e iPad erano identiche. Probabilmente avrei dovuto notare nella domanda che sto creando giochi, non applicazioni. – WendiKidd

1

tenta di denominare loro

MyCell.xib e MyCell ~ ipad.xib

quindi:

[self.tableView registerNib: @"MyCell" forCellReuseIdentifier: @"MyUniqueIdentifier"]; 
Problemi correlati