2011-12-07 18 views
5

Kiedy jestem programowania uniwersalną aplikację, powiedzmy, że mam IBAction tak:Programowanie uniwersalnej aplikacji w iOS

(IBAction)magicCode:(id)sender { 

    textField1.text = "TEST"; 

} 

muszę utworzyć nowe IBAction dla każdego widoku (iPad i iPhone). Nie mogę mieć textField1 dwukrotnie w pliku nagłówkowym, więc zastanawiam się, jak wszyscy to robią. Czy muszę umieścić pole tekstowe w aplikacji na iPhone'a o innej nazwie niż ta w aplikacji na iPada? Czy jest jakiś sposób, w jaki wszyscy inni to robią?

+0

Na wszelki wypadek, gdy faktycznie to robisz - jeśli nazywasz rzeczy 'textField1' itd., To ustawiasz się w świecie bólu. Używaj opisowych nazw zmiennych, aby od razu było oczywiste, co jest czym. W przeciwnym razie po prostu pomylisz się i sprawisz, że twoje życie stanie się trudniejsze, niż być musi. – Jim

+0

@ Jim dziękuję, ale to tylko przykład. Podążam za konwencjonalnymi standardami nazewnictwa, aby nadawać nazwy moim obiektom. – ios85

Odpowiedz

3

Nie, możesz mieć ten sam IBAction i IBOutlet w UIViewController obsługującym pola tekstowe w dwóch różnych stalówkach (jeden na iPhone i jeden na iPada). To jest cały punkt oddzielenia kontrolerów widoku od widoków w architekturze MVC.

Po prostu użyj tego samego kontrolera UIView jako właściciela pliku w obu końcówkach i wykonaj wszystkie odpowiednie połączenia IBOutlet i IBAction, a wszystko będzie działać.

+0

To jest "Właściciel pliku", a nie "Menedżer plików". – Jim

+0

@ Jim, Dzięki. odpowiedź poprawiona. –

4

Czy muszę utworzyć nową IBAction dla każdego widoku (iPad i iPhone).

Po pierwsze, akcje są zwykle uwzględniane w kontrolerach widoku, a nie w widokach. Myślę, że to właśnie masz na myśli, ale zwracam uwagę na różnicę, ponieważ widziałem, jak wiele osób wpada w ten temat w zakłopotanie.

Podczas tworzenia uniwersalnej aplikacji, tj. Pojedynczej aplikacji, która dostosowuje interfejs użytkownika do urządzenia (iPad lub iPhone/iPod Touch), na którym działa, popularną strategią jest dostarczanie różnych układów widoków, które najlepiej użycie dostępnego rozmiaru ekranu, ale użycie tych samych kontrolerów widoku. Załóżmy na przykład, że masz aplikację z interfejsem master/detail. Na małych urządzeniach najpierw wyświetlisz główną część interfejsu, a kiedy użytkownik wybierze coś, wyświetlisz szczegółową część interfejsu. Na iPadzie z większym ekranem można wyświetlać jednocześnie interfejs główny i szczegółowy w widoku podzielonym. Porównując oba, widoki prawdopodobnie będą różne, a sposób wyświetlania kontrolerów widoku jest inny, ale kontrolery widoku powinny pozostać takie same. To dobrze, ponieważ większość prac nad tworzeniem aplikacji polega na tworzeniu kontrolerów widoku.

Jeśli Twoja aplikacja jest podobna do tej, którą opisałem (lub jeśli możesz ją zmienić), to nie, nie potrzebujesz osobnych działań dla iPada i iPhone'a, ponieważ będziesz używać tych samych kontrolerów widoku w oba przypadki. Czasem zdarza się, że zachowanie aplikacji na dwóch różnych urządzeniach jest na tyle różne, że ma sens posiadanie kontrolerów widoku specyficznych dla iPada i iPhone'a. Możesz nadal móc korzystać z tych samych działań, wyprowadzając każdą z nich ze wspólnej klasy nadrzędnej, która zawiera akcje. Jeśli nie, musisz kazać każdej klasie implementować własne działania.