2011-12-07 18 views
5

Quando sto programmando un'applicazione universale, Diciamo che ho un IBAction in questo modo:Programmazione di un App Universale in iOS

(IBAction)magicCode:(id)sender { 

    textField1.text = "TEST"; 

} 

ho bisogno di creare un nuovo IBAction per ogni vista (iPad e iPhone). Non posso avere textField1 due volte nel file di intestazione, quindi mi sto solo chiedendo come fanno tutti gli altri. Devo inserire un campo di testo nell'app per iPhone con un nome diverso da quello nell'app per iPad? O c'è un altro modo in cui tutti gli altri stanno facendo questo?

+0

Nel caso in cui si stia effettivamente facendo questo, se si assegnano le parole 'textField1' ecc., Si sta preparando per un mondo di dolore. Usa nomi di variabili descrittivi in ​​modo che sia immediatamente evidente cosa è cosa. Altrimenti, finirai per confonderti e rendere la tua vita molto più difficile di quanto debba essere. – Jim

+0

@Jim grazie, ma questo è solo un esempio. Seguo gli standard convenzionali di denominazione per nominare i miei oggetti. – ios85

risposta

3

No, è possibile avere la stessa IBAction e IBOutlet in un UIViewController che si occupa di campi di testo in due diversi pennini (uno per iPhone e uno per iPad). Questo è l'intero punto di separazione tra View Controller e Views nell'architettura MVC.

Basta usare lo stesso UIViewController come proprietario del file in entrambi i pennini e realizzare tutte le connessioni IBOutlet e IBAction appropriate e tutto funzionerà.

+0

Questo è "Proprietario file", non "File Manager". – Jim

+0

@ Jim, grazie. risposta corretta –

4

Devo creare una nuova IBAction per ogni vista (iPad e iPhone).

In primo luogo, le azioni sono generalmente incluse nei controller di vista, non nelle viste. Penso che probabilmente è quello che intendevi, ma sottolineo la differenza perché ho visto un sacco di persone confondersi su questo punto.

Quando si crea un'app universale, vale a dire una singola app che adatta l'interfaccia utente al dispositivo (iPad o iPhone/iPod Touch) su cui è in esecuzione, una strategia comune è quella di fornire diversi layout di visualizzazione che rendono il migliore utilizzo delle dimensioni dello schermo disponibili, ma per utilizzare gli stessi controller di visualizzazione. Ad esempio, supponiamo di avere un'app con un'interfaccia master/dettagli. Sui dispositivi di piccole dimensioni, prima dovresti presentare la parte principale dell'interfaccia e quando l'utente sceglie qualcosa, visualizzerai la parte di dettaglio dell'interfaccia. Su un iPad, con lo schermo più grande, visualizzerai contemporaneamente entrambe le interfacce principale e di dettaglio in una vista divisa. Confrontando i due, è probabile che le viste siano diverse e il modo in cui vengono presentati i controller di visualizzazione è diverso, ma i controller di visualizzazione stessi dovrebbero rimanere gli stessi. Questa è una buona cosa, dal momento che gran parte del lavoro di creazione di un'app passa alla creazione dei controller di visualizzazione.

Se la tua app è simile a quella che ho descritto (o se puoi renderla simile), allora no, non hai bisogno di azioni separate per iPad e iPhone perché utilizzerai gli stessi controller di visualizzazione in entrambi i casi. Ci possono essere delle volte, però, quando il comportamento dell'app sui due diversi dispositivi è abbastanza diverso da avere senso avere controller specifici per iPad e specifici per iPhone. Potresti ancora essere in grado di utilizzare le stesse azioni derivando ognuna di quelle da una classe genitore comune che contiene le azioni. Altrimenti, è necessario che ogni classe implementa le proprie azioni.

Problemi correlati