ios alkalmazásfejlesztés Koltai Róbert
mit vettünk a múlt órán? mi az a protocol? szintaktikája? mire jó a category? milyen memóriakezelés van ios-en? mi ennek a 4 állapota? mi a főszabály? + 4 része mi az az ARC? mi az új az ARC-s property-k használatában? 2
mai óra felépítése ismétlés ios app lifecycle MVC view viewcontroler navigationcontroller 3
ios Core OS OSX Kernel Mach 3.0 BSD Sockets Security Power Management Keychain Access Certificates File System Bonjour 4
ios Core Services Collections AddressBook Networking File Access SQLite Core Location NetServices Threading Preferences URL Utilities 5
ios Media Core Audio OpenAL Audio Mixing Audio Recording Video Playback JPEG, PNG, TIFF PDF Quartz (2D) Core Animation OpenGL ES 6
ios Cocoa Touch Multi-Touch Core Motion View Hierarchy Localization Controls Alerts Web View Map Kit Image Picker Camera 7
application lifecycle alkalmazás állapotai not running inactive active background suspended 8
application lifecycle application delegate - (void)application:didfinishlaunchingwithoptions: (NSDictionary *)launchoptions; - (void)applicationwillresignactive: - (void)applicationdidbecomeactive: - (void)applicationdidenterbackground: - (void)applicationwillenterforeground: 9
application lifecycle application delegate - (BOOL)application:handleOpenURL:(NSURL *)url; - (void)applicationdidreceivememorywarning: - (void)application:didreceivelocalnotification: (UILocalNotification *)notification; - (void)application:didreceiveremotenotification: (NSDictionary *)userinfo; - (void)applicationwillterminate: 10
MVC Model az alkalmazás lényege, maga az app(nem a megjelenítés) View amit a user lát Controller a modelt hogyan prezentáljuk a user felé 11
MVC Stanford 2011 fall / 1 / 15-37. 12
View coordinates origó: a bal felső sarok egységek: pontok (nem pixelek) (0,0) x (320,250) y 13
View coordinates bounds center frame (0,0) 250 320 (0,0) 200 x 320 y 14
View coordinates bounds center (0,0) frame frame bounds frame (0,0) bounds x y 15
View coordinates bounds center frame superview subviews(array) add remove 16
View - kóddal való összekötés Hogyan tudunk a kódból változtatni az UIn? Hogyan tudjuk a UI események hatására műveleteket végezni? Lényegében az alábbi két dolgot kell megoldanunk: Referenciát (mutatót) kell szereznünk a betöltött UI struktúra bizonyos objektumaira Meg kell adnunk eseménykezelőket bizonyos UI objektumok egyes eseményeire 17
View - outlet Olyan változókat (Outleteket) adhatunk meg, amelyekbe a rendszer betöltéskor automatikusan beteszi a megadott objektumokat. Belehelyezzük a kódba az Outlet propertyket IBOutlet jelölőt kell használnunk, innen tudja az Interface Builder, hogy az adott property egy Outlet Az Interface Builderben beállítjuk, hogy melyik objektumot akarjuk betölteni a property-be. A View betöltéskor a rendszer automatikusan behelyezi a hivatkozást. A kódban típusosan elérjük a betöltött UI elemet. 18
View - outlet @interface ViewController : UIViewController! @property (weak, nonatomic) IBOutlet UITextField *resulttextfield;! @end 19
View - action megadhatjuk azokat a metódusokat, amelyeket a rendszer meghívjon bizonyos események bekövetkeztekor belehelyezzük a kódba az Action metódusokat az IBAction visszatérési értéket kell használni, ami igazából void, de innen tudja a rendszer, hogy ez egy Action metódus. Paramétere vagy nincs a metódusnak, vagy egy (id) sender paramért kaphat, ami azt az objektumot tartalmazza, amelyre vonatkozik az esemény. az Interface Builderben beállítjuk, hogy melyik objektum melyik eseménye váltsa ki a hívást. (pl. Touch Up Inside) az esemény bekövetkeztekor automatikusan meghívódik a metódus. 20
View - action @interface ViewController : UIViewController! - (IBAction)numberPushed:(id)sender;! @end 21
View Interface Builder XIB fájl UI a képernyőn Build Programkód Megjelenítés NIB fájl Betöltés Objektum példány 22
UIViewController MVC/controller a UIViewController-nek van egy nagyon fontos proberty-je: @property(nonatomic, retain) UIView *view; van életciklusa 23
UIViewController lifecycle az életciklusa az alloc, init-tel kezdődik - (id)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil! ha a nibname nil(nem használunk.xib filet), akkor a UIViewController automatikusan meghívja: - (void)loadview önnmagaban([self loadview])! NE HASZNÁLJUK egyszerre a.xib-t és a loadview-t 24
UIViewController lifecycle - (void)viewdidload inicializálás és az outletek beállitása után de a bounds még nincs beállítva! - (void)viewwillappear:(bool)animated mielőtt megjelenik a kijelzőn a végén állítódik be a bounds! - (void)viewdidappear:(bool)animated! - (void)viewwilldisappear:(bool)animated mielőtt eltűnik a kijelzőről állapot mentés, adat mentés - (void)viewdiddisappear:(bool)animated 25
controller of the controllers speciális View Controller, ami MVC-k gyűjteményét kezeli UINavigationController UITabBarController 26
UINavigationController több, hierarchikus képernyő közötti navigációt segíti stack (verem) jellegű működéssel rendelkezik úgy tudunk lépkedni az egyes képernyők között, hogy a visszalépéseknél nem kel tudnunk mi volt a szülő képernyőnk nagyon gyakran használt komponens gyakran használják táblázatokkal együtt 27
UINavigationController NavigationBar képernyő tetején elhelyezkedő sáv megmutatja az adott view címét lehetőséget ad a visszalépésre az előző szintre a vissza gombon mindig az előző szint címe van jobb oldalán van hely egy szabad gombnak 28
UINavigationController létrehozás: alloc/init meg kell adni egy rootviewcontrollert push [self.navigationcontroller pushviewcontroller:nextviewcontroller animated:yes]; pop [self.navigationcontroller poptorootviewcontrolleranimated:yes]; [self.navigationcontroller popviewcontrolleranimated:yes]; [self.navigationcontroller poptoviewcontroller:prevviewcontroller animated:yes]; 29
UINavigationController 30
UINavigationController 31
UITabBarController több view között lehet fülekkel váltogatni képernyő alján szokott elhelyezkedni általában ez a legkülső navigációs elem maximum 5 lap fér el, ezután megjelenik a more lehetőség 32
UITabBarController lehet benne NavigationController, de mindig a TabBarController a külső elem általában nem igényel programozás, beállítjuk a betöltendő ViewControllereket, és a többit kezeli magától egyszerre mindig egy fül lehet aktív, a többi megőrzi állapotát és bármikor átválthatunk 33
UITabBarController 34
köszönöm a figyelmet! Koltai Róbert robert.koltai@ponte.hu