Platform lehetőségek kutatása: ios. A Mobil multimédiás kliens fejlesztői eszközkészlet létrehozása című kutatás-fejlesztési projekthez

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Platform lehetőségek kutatása: ios. A Mobil multimédiás kliens fejlesztői eszközkészlet létrehozása című kutatás-fejlesztési projekthez"

Átírás

1 Platform lehetőségek kutatása: ios A Mobil multimédiás kliens fejlesztői eszközkészlet létrehozása című kutatás-fejlesztési projekthez

2 Tartalomjegyzék 1 Bevezetés Objective-C ARC Konstruktorok Metódusok, üzenetek Interfészek és implementációk Interfészek Implementációk Példányosítás Kategóriák és kiterjesztések (categories, extensions) Kategóriák Extensions Protokollok SEL Delegált fejlesztési minta (delegate design pattern) ios Gyári alkalmazások Liszensz politika Apple elvárások AppStore-ba töltéshez Bevezetés az ios platform programozásába XCode tippek #pragma mark Analyze Hivatkozások (included by) Outlet-ek, action-ök iphone emulátor Compile, link és beállításaik Felhasználói felület Webszervizek Alkalmazás logika Képernyők, hogyanok és miértek Navigation Controller Induló képernyő Az UIApplicationDelegate Storyboard Splash screen Táblázatok, ScrollView elem Touch Event kezelése Források... 30

3 1 Bevezetés A dokumentum célja az ios alkalmazások fejlesztési módszereinek, lehetőségeinek kiderítése, felkutatása, vizsgálat. ios rendszerbe Objective-C nyelven lehet alkalmazásokat fejleszteni. 2 Objective-C Az Objective-C egy teljesen objektum-orientált kibővített változata a C programozási nyelvnek. A tervezők a C nyelvhez társították a Smalltalk stílusú üzenetközvetítést az objektumok között. Az 1980-as években a strukturált programozás volt a legelterjedtebb programozási modell. Előnye az volt, hogy a programokat kisebb modulokra lehetett bontani, így olvashatóbbak voltak. Nagy hátránya az volt, hogy a kód újrafelhasználása szinte nem létezett, valamint a nagy programok megint csak olvashatatlanok voltak. Hogy ezt kiküszöböljék, a XEROX Palo Alto-i kutatóközpontjában kifejlesztették a Smalltalk nyelvet, amely objektum-orientált volt. A Smalltalk nagy hátránya, hogy a programot egy Virtuális gép (VM) futtatja, emiatt nagyon nagy a memóriafelhasználása és sokkal lassúbb is, mint egy natívan futó program. Az Objective-C nyelvet Brad Cox és Tom Love fejlesztette ki az 1980-as évek elején. Mikor Steve Jobs elhagyta az Apple-t és megalapította a NeXT céget, megvásárolta az Objective-C licencét, ami lehetővé tette, hogy a NeXTstep operációs rendszert és minden fejlesztői alkalmazást Objective-C-ben írjanak meg. A NeXTstep ezáltal a kor legelőrehaladottabb operációs rendszere volt. A GNU projekt 1992-ben megjelentette a NeXTstep ingyenes klónját, az OpenStep operációs rendszert, amely már tartalmazott egy Objective-C fordítót és könyvtárakat, az gnuc-obj-t. Mikor az Apple 1996-ban megvásárolta a NeXT-et, a Mac OS X alapjául az OpenStep-et vették. Az OS tartalmazta az Objective-C-t és a NeXT fejlesztői rendszerét, a Project Buildert (amelyből később az Xcode lett), valamint az Interface Builder-t. Ezek a programok a mai napig a Mac OS X legfontosabb fejlesztői eszközei. A Cocoa API az Objective-C osztályokra támaszkodik és a legelterjedtebb Objective-C környezet a mai napig. A nyelv egy nagyon vékony réteg a C nyelv fölött (csakis C és nem C++ kiterjesztés). Bármilyen C program lefordítható Objective-C fordítóval. Az Objective-C szintaxisa a Smalltalkból ered. Minden nem objektum-orientált művelet (változók, preprocesszálás, függvény deklarációk, függvényhívások) egyezik a C-ben használtakkal, míg az objektum-orientált része a Smalltalk üzenetküldő mechanizmusának egyik változata. Az Objective-C objektum-orientált modellje az objektumpéldányok közti üzenetküldésen alapul. Ez teljesen eltér a C++ stílusú programozási nyelvektől: itt nem az objektum egyik metódusát hívjuk meg, hanem egy üzenetet küldünk az objektumnak és itt van a lényeges

4 eltérés. A Simula stílusú nyelvekben a metódus neve a fordító által pontosan meg van határozva a kódszegmensben, de a Smalltalkban és Objective-C-ben az üzenet csak egy név és futásidő alatt lesz meghatározva a tárbeli címe: a fogadó objektum kell feldolgozza a kapott üzenetet. Ebből következik, hogy az üzenet küldésekor nincs típusellenőrzés, és nincs rá garancia, hogy az objektum válaszolni is fog az üzenetre. Ha nem tudja feldolgozni, akkor egyszerűen egy nil pointert ad vissza. C++ kód egy objektum metódusának meghívására: foo->bar (parameter); Ugyanez Objective-C nyelvben: [foo bar:parameter]; Mindkét stílusnak megvan az előnye és hátránya. A Simula OOP-ben többszörös öröklődés és kisebb futásidő lehetséges, de alapértelmezetten nincs dinamikus kötés. A Smalltalk OOP lehetővé teszi, hogy az üzenetek ne legyenek implementálva. A Cocoa platform ezt kihasználja maximálisan: minden objektumnak a platform inicializáláskor elküldi az 'awakefromnib:' üzenetet amint a program elindul, és erre az objektumok inicializálódhatnak. Ugyanakkor nem kötelező definiálni egy objektumot az üzenet küldésekor a kódban, dinamikus kötéssel a függőségeket a runtime oldja meg. Egy Objective-C üzenet feldolgozása legalább háromszor annyi időbe telik, mint egy virtuális C++ metódushívás. Objective-c kódok készíteni majd futtatni Mac OSX operációs rendszeren az XCode nevű fejlesztőeszközzel szoktak. Az Xcode egy iphone/ipad szimulátor is tartalmaz, ami nagyjából mindent tud emulálni, tehát az iphone alkalmazás fejlesztése a szimulátoron végrehajtható, de azért a teszteléshez szükséges egy iphone. A következő kis fejezetekben azokat a tulajdonságokat vesszük sorra melyek egyediek, eltérnek más nyelvektől. 2.1 ARC A cím az automatic reference counting rövidítése. C nyelvben minden memória foglalás felszabadításáról a programozónak kell gondoskodnia. Java-ban a JVM garbage collector folyamata gondoskodik erről. Amikor egy új objective-c projektet hozunk létre XCode-ban nyilatkoznunk kell, hogy ARC-s vagy ARC nélküli a projekt. ARC nélküli esetben minden alloc-ot valahol követnie kell egy dealloc-nak. ARC-s projektben nem tudunk dealloc hívást írni mert az XCode hibának jelzi. Tehát az ARC-s Objective-c közel olyan kényelmes memória használat szempontjából, mint a java. 2.2 Konstruktorok A szokásos objektum orientált paradigmát ismerők első kérdései között szerepel, hogy miként lehet konstruktort készíteni. A válasz egyszerű, minden olyan metódus, mely az adott osztály egy példányára mutató mutatót adja vissza az konstruktor, a következő példában a WSLogin osztály konstruktora ki van WSLogin : NSObject -(WSLogin*) initwithdelegate: (id<wslogindelegate>) _del;

5 -(void) (weak) id<wslogindelegate> delegate; Az, hogy mutató, onnan látszik, hogy van utána egy csillag. Ha ezt lehagyjuk, az XCode jelzi is. Az ios gyári osztályai általában id típust adnak vissza a konstruktorok. Az id az tulajdonképpen egy olyan mutató mely bármilyen más osztály mutatóját tartalmazhatja. Tehát az id után nem kell csillag, mert az eleve mutató. 2.3 Metódusok, üzenetek Az Objectiv-C egyik furcsasága például a java-val szemben, hogy míg java esetén már fordítási időben kiderülnek a metódus eltérések, hiányok, típus eltérések, addig Objective-C esetén még futásidőben sem. Mivel az Objective-C nem metódusokban gondolkodik, hanem üzenetekben, ezért ha egy objektumnak küldött üzenettel az objektum nem tud mit kezdeni (vagyis nincs olyan metódusa), egyszerűen egy szó nélkül nil-t ad vissza és a program futása tovább folytatódik. 2.4 Interfészek és implementációk Az Objective-C nyelvben egy osztály interfésze és implementációja különálló kód-tömbökben kell legyen. Megegyezés szerint az interfészt egy header fájlban (általában.h kiterjesztéssel) míg az implementációt egy kód fájlban helyezzük el (általában.m kiterjesztéssel). A "h" fájlban vannak azok az információk, hogy a külvilág mit lát az osztályból, ez az interfész definíció. Az "m" fájlban pedig az interfészt megvalósító kód van, és persze lehetnek a külvilág számára láthatatlan metódusok is Interfészek Az interfész általában a header fájlban van leírva. Szokványos, hogy a fájl neve az osztály neve is egyúttal. Ha van egy Foo osztályunk, akkor ezt általában a Foo.h fájlba tesszük. Példa egy interfész osztálynév : ősosztálynév { // változók -(típus)példánymetódus1:(típus)paraméter1_neve :(típus)paraméter2_neve; -(típus)példánymetódus2paraméter1:(típus)paraméter1_neve andparaméter2:(típus)paraméter2_neve; +(típus)osztálymetódus1; +(típus)osztálymetódus2; +(típus)osztálymetódus3:(típus)paraméter_neve; A '+' azt jelenti, hogy osztálymetódus, a '-' hogy példány metódusa. Az osztálymetódusok olyanok mint a static metódusok java-ban. Megfigyelhetjük, hogy a példánymetódus2paraméter1 mutatja az Objective-C egyik különlegességét, hogy a paramétereket nevesíteni lehet a függvény nevében (ilyet még csak

6 Oracle PL/SQL-ben láttam). És szokványos az is, hogy a második paramétertől kezdve "and" szócskával kezdődnek a paraméterek nevei, mintha egy kis mondat lenne az egész metódus hívós sor. Tehát a második paraméter így néz ki: andparaméter2:(típus)paraméter2_neve A metódus hívásakor ezt írjuk: andparaméter2:var2 Ahol var2 az ott helyben létező típus típusú változó. Tehát a metódust hívó az andparaméter2-vel hivatkozik, a metódus megvalósító kód pedig a paraméter2_neve változóban éri el a kapott paramétert. A visszatérési típusok lehetnek bármilyen standard C típusok, egy pointer egy Objective-C objektumra, vagy egy specifikus objektumra mutató pointer (NSArray *, NSImage *, NSString *). A metódusok paraméterei kettősponttal kezdődnek, utána következik a típus majd a neve. Sok esetben érdemes megnevezni a paramétereket: -(void) setrange:(int)start :(int)end; -(void) importdocumentwithname:(nsstring *)name withspecifiedpreferences:(preferences *)prefs beforepage:(int)insertpage Implementációk Az interfész csak a metódusok és változók neveit deklarálja; maga a kód az implementációban létezik. Általában.m kiterjesztésű fájlokba classname +(típus)osztálymetódus { // implementáció -(típus)példánymetódus { // implementáció Itt egy példa a paraméterek nevesítésére és használatára: -(int)changecolortored:(float)red green:(float)green blue:(float)blue; [mycolor changecolortored:5.0 green:2.0 blue:6.0]; 2.5 Példányosítás Az Objective-C osztályokat két lépésben példányosítjuk: először lefoglaljuk a memóriát az új objektum számára majd inicializáljuk. Egy objektum addig nem működőképes, amíg mindkét lépést nem végeztük el. Ezeket általában egyetlen sorban meg lehet oldani: MyObject *o = [[MyObject alloc] init]; Az alloc hívás elegendő memóriát foglal le, felülírásra még nem láttam példát, nem is szokás, az init hívás felülírható, hogy a változókat inicializálhassuk:

7 -(id) init { self = [super init]; if (self) { ivar1 = value1; ivar2 = value2; return self; Objective-C nyelvben a self az ugyanaz mint a java-ban a this. Az if (self) azt vizsgálja, hogy az objektum létrejött-e, vagyis hogy az self!= nil. A nil a java null megfelelője. Figyeljük meg, hogy a metódus self-el tér vissza ezért azonnal hívható egy másik metódusa az osztálynak, például feltételezve, hogy van egy loginwithuser metódusa is a MyObject osztálynak: MyObject *o = [[[MyObject alloc] init] loginwithuser:user andpassword:password]; 2.6 Kategóriák és kiterjesztések (categories, extensions) A kategória lehetővé teszi, hogy metódusokat adjunk hozzá egy meglévő osztályhoz, még akkor is ha az eredeti osztály forráskódja nem áll rendelkezésre. A kategóriák kitűnő lehetőséget biztosítanak a meglévő osztályok kibővítésére leszármazott osztály készítése nélkül. Az extensions hasonló, de megengedi más APIk deklarációját Kategóriák Új metódust az interfész fájlban egy új kategória névvel adhatjuk meg és az implementációs fájlban is ezzel a kategória névvel kell hivatkozni. A kategóriából tudható hogy a metódus utólag lett az osztályhoz adva nem pedig leszármazott osztály. Viszont új példány változót nem lehet a kategóriával az osztályhoz adni. A kategóriában lévő metódusok az osztály részévé válnak. Például, ha metódust adunk az NSArray osztályhoz egy kategóriában, akkor a fordító feltételezi, hogy minden NSArray példányban benne lesz ez a metódus. Ha származtatott osztályt készítenénk a kategória helyett, akkor az eredeti NSArray példányokban nem lenne benne a leszármazottban lévő metódus, természetesen. A kategória metódusok mindent megtehetnek amit az osztály normál metódusai is. Futásidőben nincs különbség. A kategóriában definiált metódusok az kiterjesztett osztályból származtatott osztályban is használhatók lesznek. A kategória deklaráció nagyon hasonlít az osztály interfész definícióra kivéve, hogy a kategória név zárójelek között szerepel az osztály neve után és ősosztály nem szerepel. Ha ezek a metódusok használnak példány változókat, akkor szerepelnie kell a kiterjesztendő osztály interfész importjának: #import "ClassName.h"

8 @interface ClassName ( CategoryName ) // method declarations A kategória nem deklarálhat újabb példány változókat csakis kizárólag metódusokat. A kiterjesztendő osztály minden példány változója ugyanúgy elérhető a kategóriában mint a kiterjesztendő osztályban még részben definiáltak is. Nincs limitálva az egy osztályhoz létrehozható kategóriák száma, csak annyi a megkötés, hogy mindegyik nevének el kell térnie Extensions Az extensions olyan kb. mint egy névtelen kategória, kivéve hogy a metódusok melyeket deklarál a blokkban kell megvalósítani. Felül lehet definiálni példány változók láthatóságát is akár. Az extensions többnyire az implementációs fájlban kerül megvalósításra. Az interfész fájlban MyClass : (retain, readonly) float value; Az implementációs fájlban MyClass (retain, readwrite) float value; A kategóriákkal ellentétben itt nincs név a zárójelek között. Osztály extensions lehetővé teszi, hogy deklaráljunk kötelezően megvalósítandó metódusokat, az interfész fájlban MyClass : NSObject - (float)value; Az implementációs fájlban MyClass () { float value; - MyClass - (float)value { return value; - (void)setvalue:(float)newvalue { value = newvalue;

9 A setvalue metódus megvalósításának a blokkban kell lennie, nem lehet úgy implementálni mintha kategóriában lenne. 2.7 Protokollok A protokollok lehetővé teszik a többszörös öröklődést. Kétféle protokoll van: ad-hoc vagy informális és fordító által szabályozott, vagy formális protokollok. Egy informális protokoll egyszerűen egy metódus lista, amit az osztály implementálhat. A dokumentációban létezik, mivel a nyelvben nem jelenik meg. Ilyenek például az opcionális metódusok, ahol a metódus implementálása az osztály teljes működését befolyásolja. A formális protokoll hasonló a Java interface típusaihoz. Ez egy metódus lista amelyet az osztály felsorol implementálás céljából. A 2.0 Objective-C változatok előtt minden felsorolt metódust implementálni kellett, máskülönben a fordító hibát jelzett, ha az osztály nem implementálta minden metódusát a felsorolt protokollokban. Ez már nem kötelezö a 2.0 változattól kezdődően. A leglényegesebb különbség a Java nyelvvel szemben, hogy egy osztály implementálhatja a protokollt anélkül, hogy deklarálta volna. A különbség a kódon kívül nem látható. Locking - (void)lock; - (void)unlock; Ez a protokoll a lock műveletet implementálja, amelyet a következő osztály Osztaly : OsOsztaly <Locking> Ez azt jelenti, hogy az Osztaly implementálni fogja a két metódust a Locking protokollból, ahogyan akarja. Lehetőség van arra, hogy kötelezővé tegyük a protokollt implementálni szándékozó osztályok részére bizonyos metódusok megvalósítását. Erre módosító ad - (void)lock; - (void)unlock; 2.8 SEL Minden metódus azonosítható egy selector-ral. A metódus nevével lehet selector-t létrehozni, C logikával a selector tulajdonképpen egy metódusra mutató mutató. Egy ilyen mutatóra az Objective-C nyelvben van egy speciális típus: SEL: SEL setwidthheight; Egy ilyen változónak a hívással adhatunk értéket:

10 setwidthheight Vagy akár string-et is megadhatunk az NSSelectorFromString metódusnak: NSString *abuffer setwidthheight = NSSelectorFromString(aBuffer); Vagy meg is hívhatunk egy metódust: [obj1 performselector:@selector(gossipabout:) withobject:objx]; Ami teljesen megegyezik a következő hívással: [obj1 gossipabout:objx]; Sőt, ellenőrizni is tudjuk, hogy létezik-e egy metódus: if ( [obj1 respondstoselector:@selector(gossipabout:)] ) Delegált fejlesztési minta (delegate design pattern) Más programozási környezetből érkezőknek (java, c, c++, delphi) ez a legfurcsább dolog az ios fejlesztésben. A lényegét a következők írják le: szeretnénk egy osztálynak meghívni egy metódusát (üzenetet küldünk az osztálynak), de a meghívott metódus eredményét nem a visszatérési értékében kapjuk meg, hanem a hívó osztály egy metódusát visszahívja a meghívott a hívó osztálynak tehát lesz egy metódusa amit a hívott osztály meghív, ezt hívják úgy, hogy adott protokollt implementál a hívó a hívott osztálynak kell ismernie azt a példányt (a hívót), aki az adott protokollt implementálja, hogy vissza tudja hívni Nézzünk egy példát, mert így talán túl elméleti. Van egy osztály mely webszervizen keresztül képes bejelentkezni, legyen például WSLogin a neve. Ennek az interfész fájljában(h) van az a protokoll definiálva melyet a hívónak kell -(void) logincompleted: (Session*) WSLogin : NSObject -(WSLogin*) initwithdelegate: (id<wslogindelegate>) _del; -(void) (weak) id<wslogindelegate> delegate; Tehát, a WSLogin osztály konstruktora vár egy paramétert melynek a neve _del, a típusa pedig id<wslogindelegate>, vagyis bármilyen osztály mely megvalósítja ezt a protokollt. A következő interfész példában látjuk, hogyan is lehet ezt megadni PGAppDelegate : UIResponder <UIApplicationDelegate, WSLoginDelegate> -(void) logincompleted: (Session*) session;

11 Tehát a PGAppDelegate osztály megvalósítja a WSLoginDelegate protokollt, ezért implementálja a logincompleted metódust. Még egy darabka szükséges, melyben a PGAppDelegate osztály meghívja a WSLogin osztály login metódusát, ezt a PGAppDelegate osztály valamelyik metódusába helyezzük el: [[[WSLogin alloc] initwithdelegate:self] login]; A folyamat a következő: 1. a PGAppDelegate létrehoz egy WSLogin példányt, a konstruktorban átadja saját magát (self) és egyben meg is hívja a login metódusát 2. a login metódus elindít egy háttérfolyamatot és azonnal a login metódus hívás utána soron folytatódik a végrehajtás 3. a háttérben futó folyamat amikor végez, meghívja a PGAppDelegate példány logincompleted metódusát 3 ios Az iphone OS, OS X iphone vagy ios annak az operációs rendszernek a neve, amelyet az Apple Inc. fejlesztett ki az iphone, ipod Touch és ipad készülékekre. Mint ahogyan a Mac OS X (amelyből származtatták), a Darwin alapokat használja. Az iphone OS négy fő rétegből tevődik össze: Core OS, Core Services, Media és Cocoa Touch. A teljes operációs rendszer alig 240 MB helyet foglal a készülék adathordozóján. Az operációs rendszernek nem volt neve, amíg az első iphone SDK meg nem jelent márciusában. Korábban az Apple csak annyit árult el, hogy az iphone OS X-et használ június 6-án már több, mint alkalmazás volt elérhető az iphone-ra. Az AppStore letöltések száma meghaladta az 1 milliárdot. Az iphone OS felhasználói felülete a multi-touch technológiára alapuló direkt manipulációra alapul. Ez azt jelenti, hogy minden objektumot, mint a valós világban, kézzel mozgatunk, manipulálunk. A felhasználói felületben kapcsolók, gombok, csúszkák vannak. A felhasználó mozdulatai egy természetes interfészt biztosítanak. A készüléknek egy belső gravitációs gyorsulásmérője van, amely az X, Y és Z koordináták irányában eső gravitációs gyorsulást méri. Mikor a készüléket bekapcsolják, egy induló képernyő jelentkezik be ikonokkal és egy "dock" a képernyő alján. A képernyő felső részén a fontosabb információk láthatók: pontos idő, akkumulátor töltöttsége, jelerősség (telefonhálózat és Wi-Fi térerő). A képernyő többi része szabadon használható az alkalmazások által. Nincs meg a kilépés koncepciója, ehelyett vagy megvárjuk, hogy az alkalmazás magától befejeződjön, vagy megnyomjuk a "home" gombot, ami befejezi az alkalmazást. Multitask csak az iphone belső processzeinek megengedett, a felhasználók alkalmazásai nem futhatnak a háttérben. Azonban több szálas alkalmazások futhatnak.

12 Az iphone és ipod Touch fő processzora egy ARM processzor, ellentétben a Macintosh Intel vagy PowerPC architektúrájával. 3D grafikához OpenGL ES-t használ amelyet a Power VR videokártya biztosít. A Mac OS X alkalmazások nem másolhatóak rá egyenesen az iphone-ra (még akkor sem, ha Cocoa alapúak), hanem specifikusan iphone-ra kell őket átírni és lefordítani (ehhez az Xcode fejlesztőcsomagot használjuk). Az iphone-on futó Safari böngésző webalkalmazások futtatására is alkalmas. Független fejlesztők az AppStore-on keresztül értékesíthetik az alkalmazásaikat. 3.1 Gyári alkalmazások A 4.0-ás verzióban a következő szoftverek vannak telepítve: Messages (SMS küldés-fogadás), Calendar, Photos, Camera, YouTube, FaceTime, Stocks, Maps, Weather, Clock, Calculator, Voice Memos, Notes, Settings, itunes, App Store, Contacts, Game Center. Négy másik alkalmazás a lényegi funkcionalitását adja a készüléknek: Safari böngésző, Mail, Telefon funkció és az ipod. Az iphone és ipod Touch közti különbség csak annyi, hogy hiányzik a telefon, SMS/MMS funkcionalitás. Az iphone "ipod" alkalmazása zenét és videót is le tud játszani ben az Apple a WWDC-n bejelentette, hogy az iphone és ipod touch a Safari böngészőben webalkalmazások futtatását is lehetővé teszi, mint például az AJAX hívások. 3.2 Liszensz politika Az SDK ingyenesen letölthető, de ahhoz, hogy valaki közvetlenül az eszközön tudjon tesztelni, és szoftvert adjon ki, az iphone Developer Program tagja kell legyen, amihez az Apple engedélye is szükséges. Minden programhoz egy kulcs is tartozik, amit csakis az Apple webapplikációin keresztül lehet generálni. Három módja van az alkalmazások feltöltésének: az App Store révén belső terjesztés a fejlesztő cégen belül és egy Ad-hoc alapon, ami maximum 100 iphone készülékre engedi feltölteni. Ez a terjesztési modell lehetetlenné teszi a GPL licenccel gyártott alkalmazások terjesztését, mivel a kulcsokat nem terjesztheti tovább (ez az Apple tulajdona), így az esetleges változtatásokat nem lehet továbbvinni. 3.3 Apple elvárások AppStore-ba töltéshez Az AppStore "ellenőrök" sok mindent vizsgálnak egy programon mielőtt azt az AppStore-ban elérhetővé tehetjük. Például olyasmiket is kifogásolhatnak, hogy túl keveset tud a program, elüt az Apple minőségfilozófiájától. Ezek után el lehet képzelni, hogy milyen alapos az AppStore ellenőrző rendszer. Ha gördülékennyé akarjuk tenni az AppStore-ban történő megjelenést, akkor ezen oldalon található információkat tanulmányozzuk alaposan:

13 Például az XCode programban van egy Product/Analyze menüpont melynek lefuttatásakor nem lenne szabad semmilyen üzenet kapni, az AppStore ellenőrzés első lépései között van ennek vizsgálata. 4 Bevezetés az ios platform programozásába Mindenképp érdemes először 2 tutorialt végigcsinálni, az egyik a First ios application a másik a Second ios application, és XCode-ban az Organizer Documentation részében keressünk rá. A fejlesztőeszköz az XCode nevű program, melyet az AppStore-ból tudunk telepíteni. 4.1 XCode tippek Az XCode használata közben van néhány dolog mely eléggé el van dugva az interneten. És amíg nem találunk rá okozhat némi fejtörést #pragma mark Az összes példaprogramban amit az XCode help rendszerből töltünk be találunk ilyen sorokat a forráskódokban. Az érdekessége az, hogy nem az ios-nek, nem a fordítónak szól, hanem az XCode-nak, a következő képen látszik, hogy a lenyíló metódus lista menüt tudjuk szekciókra osztani ezekkel a #pragma mark sorokkal: Azért érdemes tudnunk, hogy a #pragma másra is használatos Objective-C nyelveben, de nekünk nagy valószínűséggel nem lesz rá szükségünk. Részletesebb információk:

14 imeenv/articles/symbolvisibility.html Analyze Az AppStore-ba alkalmazást bejuttatni nem egyszerű művelet, ez a menüpont nyújt némi támogatást azzal, hogy a program teljes kódját egy alaposabb vizsgálatnak veti alá és forduló és jól működő részekben is képes problémákra felhívni a figyelmet: A képen látszik, hogy igen látványosan próbál megmutatni egy Logic Error néven illetett problémát. Az esetek többségében ezek javítása nem kis ráfordítást igényel Hivatkozások (included by) Eclipse-t használó fejlesztőként nagyon hamar felmerül a kérdés, hogy a jól megszokott Referenced by funkció hol található vagyis honnan tudom, hogy az osztályomat hol használják a kódban. Erre a program szerkesztő ablak bal felső sarkában található ikonra kattintáskor megjelenő menüben találunk 2 menüpontot az Includes és Included By utána zárójelben számok, hogy hányat talált az XCode. Az Includes azt mutatja meg, hogy az adott fájl milyen #include-okat tartalmaz. Az Included By pedig azt mutatja meg, hogy melyik másik fájlok includjában szerepel az adott fájl. Tehát a h és az m fájlon állva más és más lehet a menü tartalma.

15 4.1.4 Outlet-ek, action-ök Ahhoz hogy a kódból elérjünk egy GUI elemet IBOutlet típusú hivatkozást kell készítenünk a h fájlba. Erre több módszert is nyújt a Storyboard editor. Az egyik lehetőség, hogy a GUI elemet kiválasztva, jobb oldalt utolsó ikon (Connections inspector) panelen a kapcsolatokat láthatjuk, és innen a megfelelő sorból a kis jobb oldali kört drag&drop módszerrel dobjuk bele a forráskódba. Ekkor egy kis feljövő ablakban megadhatjuk a főbb paramétereit az IBOutletnek vagy az IBAcion-nek, majd a Connect gombra kattintás után a képen látható állapotba jutunk. A képen figyeljük meg, hogy a fában a Button - Guide van kiválasztva a program kódban az IBOutlet UIButton *butguide és jobb oldalt a Connections inspector-ban alul a butguide - Grid Controller kapcsolat látható Az interneten nagyon sok videót és tutoriált találni a témában, a következő linken egy nagyon jó leírás van az outletek kezeléséről: iphone emulátor Az XCode telepítésével kapunk egy nagyon jó emulátort iphone és ipad fejlesztéshez. Pár eltérést biztosan tapasztalunk majd de összességében gyors és hiteles az emulátor. Egy érdekességet tapasztaltunk a fejlesztés során. Ha egy programot fektetett módban indítunk az emulátorban, akkor nem hívódik meg a willanimaterotationtointerfaceorientation viszont egy valós iphone ios-e meghívja ezt.

16 4.3 C o m p i l e, k és beállításaik Az XCode linker részén általában semmit sem kell állítani, csak ha valami extra dolgot használunk. Esetünkben a webszerviz hívások miatt egy XML feldolgozót használunk melyet linkelni kell a programhoz. l i n 4.4 F e l h a sználói felület Leírásokban szokták emlegetni az IB eszközt, ami az Interface Builder, vagyis az a komponens, amivel a felhasználói felületeket lehet készíteni. Régebbi verziókban ez (és még pár másik alkalmazásfejlesztői eszköz is) külön program volt. Mára integrálódtak az XCodeba. Az IB-vel készített fájlok kiterjesztése xib, ezek xml-ben tartalmazzák a képernyő leírását, más helyeken nib-nek is hívják. Az Apple legújabb fejlesztése a storyboard megjelenése volt. A storyboard editor is az XCode 4-ben található. Az Apple készített egy dokumentumot melynek címe ios Human Interface Guidelines. Ebben a dokumentumban az alkalmazás dizájn stratégiától a megfelelő képek elkészítésének elméletéig mindenről van szó. Ez és az ilyen dokumentumok elolvasása nemcsak hasznos, hanem egyben előrevetíti az AppStore-ba feltölteni szándékozott alkalmazásokkal szemben támasztott követelményeket is. Például - hogy a dizájnnál maradjunk - az Apple szerint az iphone-on jól megérinthető könnyen "eltalálható" grafikai elemek (gombok) minimális mérete 44 pixel a 320 széles, 480 pixel magas képernyőn.

17 A képernyő rajzoló eszközökkel készített fájlok feldolgozása futásidőben történik, tehát a storyboard fájl átmásolódik az iphone-ra az alkalmazás csomagjában (ipk). Majd amikor a programot elindítjuk az ios felolvassa, értelmezi, végrehajtja a gui megjelenítését, osztályok példányosítását. Viszont látszólag triviálisnak látszó dolgok sem biztos, hogy megtörténnek ilyenkor. Például ha mindent jól beállítunk a storyboard-ban, hogy képernyő elforgatáskor minden a megfelelő módon méreteződjön át, de ez mégsem történik meg, akkor a storyboardban látható view hierarchiát az osztályunkban is fel kell építeni. Vagyis ha egy view benne van a másikban (child view), akkor a tartalmazó view-hoz az addsubview metódussal hozzá kell adni az általa tartalmazott view-kat: [parent addsubview:childview]. 4.5 Webszervizek Java környezetben könnyen lehet webszerviz klienst generálni, erre több megoldás, több keretrendszer is létezik. ios környezetben ezt a weboldalon tehetjük meg, ahova egy wsdl-t lehet feltölteni, majd be kell állítani a generált kód típusát (Objective-C with ARC). A végeredmény egy zip fájlban töltődik le. Minden generált zip fájlban van Soap és TouchXML könyvtár, ezt elég egyszer a projektünkbe építeni. 4.6 Alkalmazás logika Minden alkalmazásban kell lennie egyetlen osztálynak melynek interfésze kb így néz OsztályNeve : UIResponder <UIApplicationDelegate> Ha az alkalmazás fejlesztés kezdetekor az XCode-dal hozzuk létre a projektet, akkor egy ilyen osztályt automatikusan létre is hoz. Ez lesz az ugynevezett application delegate osztály vagy röviden AppDelegate. Ebből az alkalmazásban egy példány jön létre (singleton). Az operációs rendszer, az ios, ezzel az osztállyal tudatja, hogyha például az alkalmazás futását meg kell szakítani (background), mert épp van egy bejövő hívás a telefonra. Vagy például azt is, hogy most az előtérbe került az alkalmazás (foreground). Az ios rendszer egy másik érdekessége, hogy konzekvensen minden metódusnak teljes neve van, nincsenek rövidítések a rendszerben. Például az előző bekezdésben említett 2 esemény bekövetkezésekor az ios az application delegate osztály következő metódusait hívja meg: applicationdidenterbackground applicationwillenterforeground A metódusok nevében szinte mindig szerepel a will vagy a did szócska, ezzel jelezve, hogy az esemény előtt vagy az esemény után hívódik meg a metódus. Egy képernyő megjelenése közben metódus is meg tud hívódni. Persze nem mindet kell implementálni, csak amik esetében mást szeretnénk futtatni mint az alapértelmezett. A dokumentáció minden metódus esetében megadja, hogy az ősosztály (super) metódusát meg kell-e hívni vagy sem, ezt mindenképp be kell tartanunk a helyes működés érdekében. Az általában igaz, hogyha valami megvalósítása csak nagyon nehezen megy, akkor azt az ios tervezői nagy valószínűséggel máshogy képzelték el, és a program ezen az erőltetett módon megvalósított része lassú és/vagy instabil lesz.

18 4.7 Képernyők, hogyanok és miértek Navigation Controller Minden alkalmazásba el kell helyezni egy Navigation Controller-t a storyboardon. Amikor az ios betölti az alkalmazást, akkor a storyboardot is beolvassa, és példányosít pár osztályt. Ha nincs navigation controller, akkor nem működik az egyes képernyők közötti átmenet, a segue. A navigation controller képernyőnek látszik, de nem az és nem helyezhető rá semmilyen view elem Induló képernyő A navigation controllernél a storyboardban ki kell pipálni az Initial Scene jelölőnégyzet. A storyboard gondoskodok arról, hogy csak 1 Initial Scene legyen kiválasztva. Ezután az indulónak szánt képernyőt egy "Root View Controller" segue-val kell összekötni. Alkalmazásunkban az induló képernyő az úgynevezett splash screen. Ez általában egy olyan képernyő mely csak addig látszik, amíg például az alkalmazás kapcsolódik a szerverhez, adatbázishoz, vagy amíg az alap működéshez szükséges objektumok betöltődnek Az UIApplicationDelegate AppDelegat osztály az az osztály lehet melynek így néz ki az PGAppDelegate : UIResponder <UIApplicationDelegate> Esetünkben az AppDelegate osztály a PGAppDelegate nevet kapta. Hogy ki is az igazi AppDelegate azt a main.m fájlban találjuk. Ebben van az alkalmazást indító (C nyelvből bizonyára jól ismert) függvény a main,melyben megtalálhatjuk a PGAppDelegate osztályra hivatkozást: int main(int argc, char { return UIApplicationMain(argc, argv, nil, NSStringFromClass([PGAppDelegate class])); Az AppDelegate osztály kap értesítést az operációs rendszertől sokféle eseményről, a teljesség igénye nélkül nézzük mik lehetnek ezek: ha az alkalmazás elindult

19 ha az alkalmazást háttérbe helyezte az operációs rendszer, mert például érkezett egy hívás a telefonra ha az alkalmazás előtérbe került újból, mert a telefonbeszélgetés véget ért Ebből az osztályból minden alkalmazás esetében csakis 1 példány jön létre Az alkalmazás indulása közben hívódik meg a következő metódus, a dokumentáció szerint akkor, amikor az alkalmazás majdnem futásra kész: - (BOOL)application:(UIApplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions { [[[WSLogin alloc] initwithdelegate:self] login]; return YES; Az alkalmazás ezen állapotában bátran bízhatunk benne, hogy minden osztályból a szükséges példányok létrejöttek és használhatjuk azokat. Példánkban elindítunk egy webszerviz hívás segítségével egy login folyamatot. A delegate minta értelmében a login folyamat végén egy másik metódusa hívódik majd meg az AppDelegate-nek. Sikeres bejelentkezés után elindíthatunk egy Timer-t, mely időközönként valamilyen feladatot végez: -(void) startheartbeat { heartbeattimer = [NSTimer scheduledtimerwithtimeinterval:30 target:self selector:@selector(heartbeat:) userinfo:nil repeats:yes]; [[NSRunLoop currentrunloop] addtimer:heartbeattimer formode: NSDefaultRunLoopMode]; A vastagon kiemelt szám mutatja, hogy 30 másodpercenként fog elindítani valamit a Timer. És a vastagon kiemelt heartbeat: metódust fogja meghívni. utasításról már korábban volt szó. -(void) heartbeat: (NSTimer *) sender { NSLog(@"heartbeat"); A következő metódus hívódik meg akkor, ha például egy bejövő hívás érkezik ezért az alkalmazást a háttérbe teszi az ios. Ebben a metódusban annyi információt kell eltárolni, hogy amikor az alkalmazás újraaktiválódik, akkor tudja folytatni a futását. És ebben a metódusban kell leállítani a futó Timer-eket, ha vannak: - (void)applicationdidenterbackground:(uiapplication *)application { [heartbeattimer invalidate]; NSLog(@"Going to sleep..."); A következő metódus hívódik meg, ha mondjuk vége a hívásnak és az alkalmazás visszakapja a vezérlést. De olyan is előfordulhat, hogy az alkalmazás használata közben letesszük a telefont az asztalra, majd ott felejtjük egy napra, ha egy nap múlva ismét a kezünkbe vesszük a telefont és megnyomunk egy gombot, akkor is ez a metódus hívódik meg: - (void)applicationwillenterforeground:(uiapplication *)application {

20 up Neo"); [[[WSLogin alloc] initwithdelegate:self] login]; Itt látható, hogy az alkalmazás indulásakor (a didfinishlaunchingwithoptions metódusban) hívott bejelentkeztető webszervizt hívjuk ismét. Ebben a fejezetben tárgyalt metódusok hívásának nincs látható nyoma az eszköz képernyőjén. Ezért például a login folyamat alatt jelenítjük meg a Splash képernyőt Storyboard A StoryBoard egy új fejlesztés az XCode 4-ben és az ios 5-ben. A korábbi Interface Builderhez képest az az újdonsága, hogy több képernyő rajzolható egy nagy munkaterületen és a képernyők közötti kapcsolatok is itt adhatók meg. A storyboard editorban ezenkívül az IB-hez képest több komponens esetében is több paramétert lehet beállítani a komponenseknél. A másik nagyon fontos különbség az IB-hez képest, hogy a képernyők közötti kapcsolatok is definiálhatók, ezek neve segue. Ilyen segue egérrel húzható mondjuk egy gombról egy másik képernyőre. Innentől az alkalmazás a gombra kattintással átmegy a másik képernyőre. Korábban, amikor xib fájlokkal dolgozott a rendszer, ez sokkal nehézkesebb volt. Ha valamiről nem tudunk segue-t indítani, akkor húzzuk az egyik képernyőről a másikra. Majd a megfelelő touch esemény kezelőbe írjuk be a segue meghívását. A storyboard hátránya, hogyha többen dolgoznak egy storyboard-on, akkor a verzió kezelőbe juttatás (svn commit) sok problémát okoz, nem egyszer manuálisan kell a storyboard xml fájlt egyenesbe tenni. Viszont egy projektben akárhány storyboard fájl lehet. Látható hogy a segue-k igencsak behálózhatják a munkaterületet, még ilyen egyszerű esetben is.

21 4.7.5 Splash screen Az alkalmazás indulásakor azért a splash screent jeleníti meg az ios, mert a Navigation Controllernek beállítottuk egy segue-val, hogy a "Root View Controller" a splash screen legyen. A következő metódus hívódik meg a splash screen létrehozása közben: - (void)viewdidload { [super viewdidload]; PGAppDelegate *del = (PGAppDelegate*)[[UIApplication sharedapplication] delegate]; [del setsplash:self]; [splashimage setimage:[uiimage imagenamed:@"splash_portrait.jpg"]]; Általában minden metódusról érdemes elolvasni mit írnak a developer.apple.com weboldalon. Különösen a következő mondat keresése fontos: If you override this method, you must call super at some point in your implementation. Nem minden metódusnál szerepel a leírásban ez a mondat, például a viewdidload-nál sem, de az ős meghívása nem árthat, és az XCode-dal létrehozott osztály vázban a viewdidload hívja a super-t, ezért szerepel esetünkben is a super hívása a metódus első sorában. A metódus második sorában a tipikus megoldást láthatjuk az AppDelegate példány megszerzésének. A harmadik sorban az AppDelegate egy saját készítésű metódusát hívjuk, mely ennek hatására jött (strong) PGSplashScreenController *splash; Vagyis az AppDelegate kap egy referenciát a splash screen példányra. Ez később nyer értelmet, amikor az AppDelegate értesíti majd a splash screen-t a sikeres loginról. A következő sor beállítja a képernyőre egy UIImageView-ba a splash képernyőn látszódó képet. A következő metódus segítségével érjük el azt, hogyha fektetett állapotban (landscape) indítják el a programot, akkor az is a landscape módba váltson: - (void)willanimaterotationtointerfaceorientation:(uiinterfaceorientation)toi nterfaceorientation duration:(nstimeinterval)duration { if ((tointerfaceorientation == UIDeviceOrientationLandscapeLeft tointerfaceorientation == UIDeviceOrientationLandscapeRight)) {

22 [splashimage setimage:[uiimage else { [splashimage setimage:[uiimage imagenamed:@"splash_portrait.jpg"]]; A többi képernyőnél ez máshogy van megoldva a viewdidlayoutsubviews metódusban, de a program indulása utáni első képernyőn csak így működött az elforgatás. A következő metódus megjeleníti a progress csigának elnevezett animációt. Mely egy lekerekített sarkú négyzet melyben egy vonal forog. Ez a programban használt jelzés arra, hogy valamilyen folyamat befejeződésére várunk. Ez nem csak megjelenik, hanem blokkolja is a felhasználótól érkező inputot amíg el nem tüntetik. - (void) viewdidappear:(bool)animated { [MBProgressHUD showhudaddedto:self.view animated:yes]; A következő metódus az előtt hívódik meg, hogy a segue-t - mely a splash screen utáni képernyőre visz - a rendszer végrehajtaná, és ez kapcsolja ki a progress csigát, mivel itt csak egy darab segue van ezért nincs elágazás segue-nként a metódusban: - (void)prepareforsegue:(uistoryboardsegue *)segue sender:(id)sender{ [MBProgressHUD hideallhudsforview:self.view animated:yes]; Az AppDelegate a következő hívással indítja majd a splash screenről a következő képernyőre (Grid) vivő segue-t: [self.splash performseguewithidentifier:@"gotogrid" sender:self]; Az AppDelegate splash adattagja a fentebb látott viewdidload metódusban töltődik fel, a setsplash metódus hívással. A kódban látható "gotogrid" szöveget a storyboard editorban kell megadni az Identifier mezőben. A példa képen a gotochanneldetail segue adatai látszanak. A különböző képernyőkön lévő segue-knak lehet ugyanaz a neve. Adott képernyőből induló segue-knak viszont mindenképp különböző nevűeknek kell lennie. A "gotogrid" nevű segue a PGGridController képernyőre (scene) visz tovább Táblázatok, ScrollView elem A Grid képernyő 9 táblázatot tartalmaz minden táblázat görgethető függőleges irányban. A 9 táblázat 3 csoportra van bontva, egyszerre mindig 3 táblázat látszik. A 3 táblázat csoport között vízszintes görgetéssel (swipe) lehet váltani. A függőleges görgetés folyamatos, a vízszintes görgetés pedig lapokra osztott, vagyis 3 állapota van. Vagy az első 3 vagy a második 3 vagy a harmadik 3 táblázat látszik. Tovább bonyolítja a képernyőt a felül látható dátum mező és alatt (a képen csak a fában látszó Page Controller) swipe jelölő mely mutatja,

23 hogy a 3 lap közül éppen melyiken tartózkodunk. A képernyő felépítése már elsőre sem tűnik túl egyszerűnek, nézzük hogyan lehet ezt ios-ben megoldani. A képen bal oldalon egy fa struktúrában is láthatjuk az elemek egymásba ágyazását. Legkívül egy Image View van, mely a háttérképet fogja tartalmazni. Aztán jön a Page Control, majd a Scroll View mely a vízszintes görgetést oldja meg. A Scroll View tartalmaz 3 view-t, ezt a 3 view-t mint 3 lapot lehet lapozni. Egy ilyen view 3 table view-t tartalmaz. Most akkor lássuk mit kell tennie a kódnak, hogy ez működjön. Ha több view (olyan megjelenő objektum melynek van UIView az ősei között) van egymáson, akkor vajon melyik van felül? Amelyik felül van az letakarja az alatta levőt, tehát az alatta levő csak ott látszik ahol a felül lévő átlátszó. A fában lentebb lévő van fentebb, közelebb a szemünkhöz. Tehát a képen a kijelölt Async Image View-t eltakarja a fában alatt lévő Image View. Persze a fában vannak olyan elemek melyek egymás mellett vannak, ott ez a kitakarás nem játszik szerepet. Ahhoz, hogy az ios (5-ös sorozat esetén) ezt tényleg meg is csinálja, az egyes view elemek egymásba ágyazását kód szinten is meg kell valósítani a viewdidload metódusban: [self.view addsubview:toolbar]; [self.view addsubview:pagectrl]; [self.view addsubview:gridscrollview]; [self.gridscrollview addsubview:tableviewcontainertoday]; [self.gridscrollview addsubview:tableviewcontainertomorrow]; [self.gridscrollview addsubview:tableviewcontainerthisweek]; [self.toolbar addsubview:lbldatum]; [self.view addsubview:buttonview]; [self.buttonview addsubview:butown];

24 [self.buttonview addsubview:butfriends]; [self.buttonview addsubview:butbest]; Ha a fenti képen látható legfelső Image View elembe beállítunk egy képet mely a teljes képernyő háttere lesz akkor ahhoz, hogy ez látszódjon a Scroll View-t átlátszóvá kell tennünk: self.gridscrollview.backgroundcolor = [UIColor clearcolor]; self.gridscrollview.opaque = NO; De például a ToolBar elem csak úgy tehető átlátszóvá, hogy ráteszünk egy háttérképet, ami egy olyan kép, amin nincs semmi csak teljesen átlátszó. A Scroll View akkor görgethető "darabosan", vagyis úgy hogy fix pontokon áll csak meg és nem folyamatos a görgetése, hogyha a Paging Enabled paraméterét YES-re állítjuk, ahogy a képen látszik. Esetünkben három oldal lesz melyek között lehet görgetni, melyek a képen a következők: Today View, Tomorrow View, This week view. Esetünkben a Scroll View elemben az oldalankénti lapozást a következők betartásával érhetjük el. 1. setcontentsize metódussal adjuk meg a képernyő vízszintes méretének háromszorosát 2. setcontentoffset hívással állítsuk be melyik oldal látszódjon 3. a Scroll View frame-jét állítsuk a képernyőn látható méretére 4. az egyes Table View frame-eket állítsuk be úgy, hogy a megfelelő helyre kerüljenek Minden UIView leszármazott frame adattagjával lehet beállítani, hogy az adott view mekkora legyen és hol helyezkedjen el a szülő view-ján belül. A gyakorlatban ezt meg kell még bonyolítani azzal, hogy a készülék elforgatásakor az álló és a fekvő képernyőn is jól látszódjanak az elemek. Az elforgatáskori átszámolásra a viewdidlayoutsubviews metódust használjuk, és mivel ez a képernyő megjelenítése során mindig meghívódik ezért itt állítunk be minden méretet. A következő ábrán talán jobban érthetővé válik, hogy mit is szeretnénk. Az ábrán a piros téglalap a Scroll View, a zöld téglalapok a Today View, Tomorrow View és a This week View, a fekete téglalapok pedig a Table view-k melyek függőlegesen görgethetők. A Scroll View frame mérete határozza meg az oldalak méretét, a contentsize pedig a teljes méretét. A setcontentsize beállítása (fentebb 1.-es pont) és a Scroll View frame beállítása (fentebb 3-mas pont): int scree nwidt h = self. view.

25 frame.size.width; self.gridscrollview.frame = CGRectMake(self.gridScrollView.frame.origin.x, self.gridscrollview.frame.origin.y, screenwidth, self.gridscrollview.frame.size.height); [self.gridscrollview setcontentsize:cgsizemake(screenwidth*3, self.gridscrollview.frame.size.height)]; A screenwidth a látható képernyő szélességi méretét tartalmazza, ez álló és fekvő képernyő esetén eltér. Ezért ezt felhasználjuk a számítások során. Ha az első oldal látszik, akkor a következő kódot használjuk a Scroll View pozícionálására (fentebb 2.-es pont teljesítése): [self.gridscrollview setcontentoffset:cgpointmake(0, 0)]; Ha a második oldal: [self.gridscrollview setcontentoffset:cgpointmake(screenwidth, 0)]; Ha a harmadik oldal: [self.gridscrollview setcontentoffset:cgpointmake(screenwidth*2, 0)]; A három view (zöld téglalapok) frame-jét is be kell állítanunk (fentebb 4.-es pont teljesítése): CGRect fr = self.gridscrollview.frame; self.tableviewcontainertoday.frame = CGRectMake(0, 0, screenwidth, fr.size.height); self.tableviewcontainertomorrow.frame = CGRectMake(screenWidth, 0, screenwidth, fr.size.height); self.tableviewcontainerthisweek.frame = CGRectMake(screenWidth*2, 0, screenwidth, fr.size.height); A screenwitdh változó fentebb kapott értéket. Figyeljük meg, hogy mindegyik frame screenwidth széles és a magassága megegyezik a Scroll View magasságával, és felülről (y koordináta) 0 pixel távolságra van. Ami változik az a Scroll View bal szélétől mért távolság. Mivel eddig mindent a screenwidth értékéből számoltunk, így a képernyő álló vagy fekvő állapotában is jó lesz a számolás. A következő feltétellel ellenőrizhető, a készülék aktuális iránya, és itt látható példa a különböző irányokban történő háttérkép beállításra: if (([[UIApplication sharedapplication] statusbarorientation] == UIDeviceOrientationLandscapeLeft [[UIApplication sharedapplication] statusbarorientation] == UIDeviceOrientationLandscapeRight)) { // landscape [(UIImageView*) self.view setimage:[uiimage imagenamed:@"land_grid_hatter.jpg"]]; else { // portrait [(UIImageView*) self.view setimage:[uiimage imagenamed:@"grid_hatter.jpg"]]; Azt hogy a képernyőnk milyen irányban képes megjelenni jól és ezekben az irányokban hívódjanak meg a képernyőnk metódusai azt a következő metódus visszatérési értékével jelezhetjük az ios rendszernek:

26 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interf aceorientation { return YES; Fontos, hogy a view hierarchián kívül (addsubview-val a view hierarchiát definiáltuk fentebb) a View Controllerek hierarchiáját is kialakítsuk, erre szolgál az addchildviewcontroller metódus: [self addchildviewcontroller:tableviewctrl]; A következő metódus összekapcsolja a view-t (ami tartalmazza a table view-t) a table view-t és a table view controller-t, ami a table view-t vezérli: -(void) connecttableviewandcontroller:(programlisttableviewcontroller *)tableviewctrl tableview:(uitableview *)tableview tableviewcontainer:(uiview *) tableviewcontainer { [tableview setdatasource:tableviewctrl]; [tableview setdelegate:tableviewctrl]; [tableviewctrl settableview:tableview]; [tableviewcontainer addsubview:tableview]; [self addchildviewcontroller:tableviewctrl]; Ezt sok helyen tudjuk használni tekintettel a képernyőn található 9 table view-ra. A Scroll View-ban a görgetés befejeztével az éppen látszó 3 table view-t be kell frissítenünk, ezt a scrollviewdidenddecelerating metódusban tehetjük meg, ez akkor hívódik meg, amikor a görgetés teljesen megáll: - (void)scrollviewdidenddecelerating:(uiscrollview *)scrollview { int offset = self.gridscrollview.contentoffset.x; int screenwidth = self.view.frame.size.width; if (offset == 0) { [PGCommon getsessiondata].gridaktdate = TODAY; [self refreshtableviews]; else if (offset == screenwidth) { [PGCommon getsessiondata].gridaktdate = TOMORROW; [self refreshtableviews]; else { [PGCommon getsessiondata].gridaktdate = THISWEEK; [self refreshtableviews]; A TableView úgy jeleníti meg az adatokat, hogy ha készítenünk kell hozzá egy TableViewController-t. Az az osztály lehet TableViewController mely interfésze így néz ProgramListTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> Vagyis az UITableViewController az őse és megvalósítja a UITableViewDelegate, UITableViewDataSource protokollokat.

27 A táblázatok alapvetően úgy jelennek meg, hogy a táblázat celláját definiálni kell külön, majd az UITableViewDataSource protokollban definiált cellforrowatindexpath implementálásával képes lesz az ios soronként elkérni a megfelelő cellát a kódunktól. A megjelenítéssel vagy a görgetéssel vagy a cellák létrehozásával nem kell foglalkoznunk, ezt az ios végzi. A másik kötelező metódus a numberofrowsinsection melyben az ios a táblázat által tartalmazott sorok számát tudakolja az osztályunktól. Itt jegyzem meg, hogy a táblázat a sorokat szekciókra (section) tudja bontani vagyis két mélységű fát tud ábrázolni. Esetünkben csak egy szekció van. A táblázat cella egy korábbi képernyőképen már szerepelt, ezen a képen piros kerettel be is jelöltük. A fában látszik a Program List Table Cell elem mely alá rendelve látszik 4 további elem, melyek a piros négyszögön belül vannak a képernyő design terven. A TableViewCell leszármazott egy különálló osztály mely általában nagyon egyszerű. Szinte csak az elemek tárolására szolgál. Ez van a h ProgramListTableCell : (nonatomic, strong) IBOutlet AsyncImageView (nonatomic, strong) IBOutlet UIImageView (nonatomic, strong) IBOutlet UILabel (nonatomic, strong) IBOutlet UILabel (nonatomic, strong) NSString *category; Ez pedig az m prgimage = frameimage = prglabel = datelabel = category = _category; - (id)initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier { self = [super initwithstyle:style reuseidentifier:reuseidentifier]; return self; A cellák beállítása, feltöltése egyesével történik a TableViewController osztályban a cellforrowatindexpath metódusban, ezt az ios hívja amikor ki szeretne rajzolni egy cellát. TableView frissítése a reloaddata metódussal történik, amikor már a táblázat mögötti adatlista frissítése megtörtént. A reloaddata hatására az ios az összes látszó cellát újra elkéri egyesével a cellforrowatindexpath metódustól.

28 4.7.7 Touch Event kezelése Általában ez nem nehéz feladat, ezért az alap tutorial-okban leírt eseteket nem is tárgyaljuk. Nézzünk inkább egy komplexebb problémát. Egy táblázat egy sora egy cella, ebben a cellában alapvetően két terület határolható el: a bal oldali piros négyszög, ezt megérintve egy képernyőre szeretnénk jutni a jobb oldali piros négyszög, ezt megérintve egy másik képernyőre szeretnénk jutni A képen bal oldalon piros téglalapban látható, hogy két view-t helyeztünk el először a táblázat cellában majd ezekbe a view elemekbe pakoltuk a többi elemet. A táblázat cellát előállító metódusban (cellforrowatindexpath) a következő kódot helyezzük el (a bal oldali view a channelimageview a jobb oldali view a prglistview): if ([[cell.channelimageview gesturerecognizers] count] == 0) { [cell addsubview:cell.channelimageview]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initwithtarget:self action:@selector(handlechanneltap:)]; tap.cancelstouchesinview = YES; tap.numberoftapsrequired = 1; [cell.channelimageview addgesturerecognizer:tap]; [cell.channelimageview setuserinteractionenabled:yes]; Tehát a Touch Event a channelimageview-n a handlechanneltap metódust fogja hívni. A prglistview esetében is hasonló a kód csak itt a handleprgtap metódust hívjuk: if ([[cell.prglistview gesturerecognizers] count] == 0) { [cell addsubview:cell.prglistview]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initwithtarget:self action:@selector(handleprgtap:)]; tap.cancelstouchesinview = YES; tap.numberoftapsrequired = 1; [cell.prglistview addgesturerecognizer:tap]; [cell.prglistview setuserinteractionenabled:yes]; A fentebb beállított metódusok így néznek ki:

ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK anagy@mik.bme.hu

ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK anagy@mik.bme.hu ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK anagy@mik.bme.hu 1 ios platform Apple mobil operációs rendszere iphone, ipod Touch, ipad OS X-en alapul De nem kompatibilis azzal Homogén rendszer

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

Objective-C PPKE-ITK 2013. 02. 14.

Objective-C PPKE-ITK 2013. 02. 14. Objective-C PPKE-ITK 2013. 02. 14. Objective-C bevezetés "Objective-C is a superset of C" Header:.h, osztálydeklarációk Implementáció:.m, osztályok implementációja Objective-C++:.mm Framework: Cocoa Szintaxis

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Bevezetés a Python programozási nyelvbe

Bevezetés a Python programozási nyelvbe Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban

Részletesebben

ios alkalmazásfejlesztés

ios alkalmazásfejlesztés ios alkalmazásfejlesztés mi kell hozzá? Mac OS X ios Developer Program regisztráció (99$/year) SDK + Xcode eszközök 2 Mac OS X Finder Launchpad Spotlight Preview Terminal AppStore 3 Xcode felépítése 4

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

Részletesebben

Az iphone fejlesztés alapjai

Az iphone fejlesztés alapjai Az iphone fejlesztés alapjai I. előadás A ponte.hu Kft. 2001 óta a piacon Web iphone, Android, Nokia és Windows mobile fejlesztések Újszerű megoldások és technológiák keresése A kurzus menete 3x45+2x45

Részletesebben

iphone programozás alapjai

iphone programozás alapjai iphone programozás alapjai I. Gyakorlat A mai gyakorlat témái I. Számológép Egyszerű Interface Builder példa Outletek és Actionok bekötése II. Szakácskönyv Neki kezdünk a nagy feladatnak Megjelenítés elemei

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

ios alkalmazásfejlesztés Koltai Róbert

ios alkalmazásfejlesztés Koltai Róbert 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

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

Ez a felhasználói útmutató a következő modellekre vonatkozik:

Ez a felhasználói útmutató a következő modellekre vonatkozik: AirPrint útmutató Ez a felhasználói útmutató a következő modellekre vonatkozik: HL-L850CDN/L8350CDW/L8350CDWT/L900CDW/L900CDWT DCP-L8400CDN/L8450CDW MFC-L8600CDW/L8650CDW/L8850CDW/L9550CDW A verzió HUN

Részletesebben

ÁNYK53. Az Általános nyomtatványkitöltő (ÁNYK), a személyi jövedelemadó (SZJA) bevallás és kitöltési útmutató együttes telepítése

ÁNYK53. Az Általános nyomtatványkitöltő (ÁNYK), a személyi jövedelemadó (SZJA) bevallás és kitöltési útmutató együttes telepítése ÁNYK53 Az Általános nyomtatványkitöltő (ÁNYK), a személyi jövedelemadó (SZJA) bevallás és kitöltési útmutató együttes telepítése Az ÁNYK53 egy keretprogram, ami a személyi jövedelemadó bevallás (SZJA,

Részletesebben

Felhasználói kézikönyv. AirPrint

Felhasználói kézikönyv. AirPrint Felhasználói kézikönyv AirPrint BEVEZETÉS Mindent megtettünk annak érdekében, hogy e dokumentumban található adatok teljes körűek, pontosak és naprakészek legyenek. A gyártó nem vállal felelősséget a hatáskörén

Részletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba

Részletesebben

VII. Appletek, grafika

VII. Appletek, grafika VII. Appletek, grafika 1. Bevezetés A tantárgy elején említettük, hogy a Java alkalmazásokat két nagy csoportba sorolhatjuk. Ezek: alkalmazások (applications) alkalmazáskák (applets) Az eddig megírt programjaink

Részletesebben

Hardver és szoftver követelmények

Hardver és szoftver követelmények Java-s Nyomtatványkitöltő Program Súgó Telepítési útmutató Hardver és szoftver követelmények A java-s nyomtatványkitöltő program az alábbi hardverigényt támasztja a számítógéppel szemben: 400 MHz órajelű

Részletesebben

Az iphone fejlesztés alapjai. I. előadás

Az iphone fejlesztés alapjai. I. előadás Az iphone fejlesztés alapjai I. előadás A ponte.hu Kft. 2001 óta a piacon Web iphone, Android, Nokia és Windows mobile fejlesztések Újszerű megoldások és technológiák keresése A kurzus menete 3x45+2x45

Részletesebben

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

Android Commander Felhasználói kézikönyv

Android Commander Felhasználói kézikönyv Android Commander Felhasználói kézikönyv Android Commander felhasználói kézikönyv A kézikönyv használata Mielőtt elindítaná és használná a szoftvert kérjük olvassa el figyelmesen a felhasználói kézikönyvet!

Részletesebben

Ez a Használati útmutató az alábbi modellekre vonatkozik:

Ez a Használati útmutató az alábbi modellekre vonatkozik: AirPrint útmutató Ez a Használati útmutató az alábbi modellekre vonatkozik: HL-340CW/350CDN/350CDW/370CDW/380CDW DCP-905CDW/900CDN/900CDW MFC-930CW/940CDN/9330CDW/9340CDW A verzió HUN Megjegyzések meghatározása

Részletesebben

Android Commander Felhasználói kézikönyv

Android Commander Felhasználói kézikönyv Android Commander Felhasználói kézikönyv A kézikönyv használata Mielőtt elindítaná és használná a szoftvert kérjük olvassa el figyelmesen a felhasználói kézikönyvet! A dokumentum nem sokszorosítható illetve

Részletesebben

Java programozási nyelv 4. rész Osztályok II.

Java programozási nyelv 4. rész Osztályok II. Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék

Részletesebben

OOP. Alapelvek Elek Tibor

OOP. Alapelvek Elek Tibor OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós

Részletesebben

Programozás II gyakorlat. 6. Polimorfizmus

Programozás II gyakorlat. 6. Polimorfizmus Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással

Részletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

DebitTray program Leírás

DebitTray program Leírás DebitTray program Leírás Budapest 2015 Bevezetés Egy-egy kintlévőséghez tartozó határidő elmulasztásának komoly következménye lehet. Éppen ezért a Kintlévőség kezelő program főmenü ablakában a program

Részletesebben

Programozás C++ -ban 2007/7

Programozás C++ -ban 2007/7 Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

AirPrint útmutató. 0 verzió HUN

AirPrint útmutató. 0 verzió HUN AirPrint útmutató 0 verzió HUN Megjegyzések meghatározása Ebben a használati útmutatóban végig az alábbi ikont használjuk: Megjegyzés A Megjegyzések útmutatással szolgálnak a különböző helyzetek kezelésére,

Részletesebben

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 04. 17. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési

Részletesebben

OOP és UML Áttekintés

OOP és UML Áttekintés OOP és UML Áttekintés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) OOP és UML Áttekintés 2013 1 / 32 Tartalom jegyzék 1 OOP Osztály Öröklődés Interfész, Absztrakt Osztály Kivétel kezelés

Részletesebben

A Java EE 5 plattform

A Java EE 5 plattform A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11. 13. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési

Részletesebben

AirPrint útmutató. 0 verzió HUN

AirPrint útmutató. 0 verzió HUN irprint útmutató 0 verzió HUN Megjegyzések meghatározása Ebben a használati útmutatóban végig az alábbi ikont használjuk: Megjegyzés Megjegyzések útmutatással szolgálnak a különböző helyzetek kezelésére,

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról

PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról Az Informatikai Igazgatóság minden aktív egyetemi hallgató és munkaviszonnyal rendelkező egyetemi dolgozó részére úgynevezett proxy

Részletesebben

ContractTray program Leírás

ContractTray program Leírás ContractTray program Leírás Budapest 2015 Bevezetés Egy-egy szerződéshez tartozó határidő elmulasztásának komoly gazdasági következménye lehet. Éppen ezért a Szerződés kezelő program főmenü ablakában a

Részletesebben

Apple ID készítése és vásárlás az AppStore áruházban

Apple ID készítése és vásárlás az AppStore áruházban Apple ID készítése és vásárlás az AppStore áruházban Ahhoz, hogy bármilyen ios-t használó eszközt tudjunk, rendeltetésszerűen használni szükségünk van egy úgynevezett Apple ID-re. Ennek segítségével jogosultságot

Részletesebben

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. OOP #6 (VMT és DMT) v1.0 2003.03.07. 19:33:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_06-1 - E jegyzet másolata

Részletesebben

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout

Részletesebben

Iman 3.0 szoftverdokumentáció

Iman 3.0 szoftverdokumentáció Melléklet: Az iman3 program előzetes leírása. Iman 3.0 szoftverdokumentáció Tartalomjegyzék 1. Az Iman rendszer...2 1.1. Modulok...2 1.2. Modulok részletes leírása...2 1.2.1. Iman.exe...2 1.2.2. Interpreter.dll...3

Részletesebben

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv Tartalomjegyzék 1. Symbian rendszer...2 1.1 Funkciók és követelmények...2 1.2 Telepítés és használat...2 2. Windows Mobile rendszer...6 2.1

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. november A C++ programozási nyelv Soós Sándor 1/12 Tartalomjegyzék Miért

Részletesebben

AirPrint útmutató. A Használati útmutató a következő modellekre vonatkozik: MFC-J6520DW/J6720DW/J6920DW. 0 verzió HUN

AirPrint útmutató. A Használati útmutató a következő modellekre vonatkozik: MFC-J6520DW/J6720DW/J6920DW. 0 verzió HUN AirPrint útmutató A Használati útmutató a következő modellekre vonatkozik: MFC-J650DW/J670DW/J690DW 0 verzió HUN Megjegyzések meghatározása A használati útmutatóban a megjegyzéseket végig az alábbi stílusban

Részletesebben

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft Flash és PHP kommunikáció Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft A lehetőségek FlashVars External Interface Loadvars XML SOAP Socket AMF AMFphp PHPObject Flash Vars Flash verziótól függetlenül

Részletesebben

Interfészek. Programozás II. előadás. Szénási Sándor.

Interfészek. Programozás II. előadás.  Szénási Sándor. Interfészek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Polimorfizmus áttekintése Interfészek Interfészek alkalmazása

Részletesebben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016 Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

Dropbox - online fájltárolás és megosztás

Dropbox - online fájltárolás és megosztás Dropbox - online fájltárolás és megosztás web: https://www.dropbox.com A Dropbox egy felhő-alapú fájltároló és megosztó eszköz, melynek lényege, hogy a különböző fájlokat nem egy konkrét számítógéphez

Részletesebben

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra: 1. Origin telepítése Az Origin telepítéséhez tegye be az Origin CD-t a CDROM-ba, majd kattintson az Origin 7.5 hivatkozásra, miután elindult a CD behelyezésekor a telepítő program. Ha nem indulna el a

Részletesebben

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Felhasználói leírás a DimNAV Server segédprogramhoz ( ) Felhasználói leírás a DimNAV Server segédprogramhoz (1.1.0.3) Tartalomjegyzék Bevezetés...3 1. Telepítés...3 2. Eltávolítás...4 Program használata...5 1. Kezdeti beállítások...5 2. Licenc megadása...6

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több

Részletesebben

Szia Ferikém! Készítek neked egy leírást mert bánt, hogy nem sikerült személyesen megoldani a youtube problémát. Bízom benne, hogy segít majd.

Szia Ferikém! Készítek neked egy leírást mert bánt, hogy nem sikerült személyesen megoldani a youtube problémát. Bízom benne, hogy segít majd. Szia Ferikém! Készítek neked egy leírást mert bánt, hogy nem sikerült személyesen megoldani a youtube problémát. Bízom benne, hogy segít majd. Első lépés: Töltsd le a programot innen: http://download.vessoft.com/files/fyds/freeyoutubedownoad.exe

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Lakóház tervezés ADT 3.3-al. Segédlet

Lakóház tervezés ADT 3.3-al. Segédlet Lakóház tervezés ADT 3.3-al Segédlet A lakóház tervezési gyakorlathoz főleg a Tervezés és a Dokumentáció menüket fogjuk használni az AutoDesk Architectural Desktop programból. A program centiméterben dolgozik!!!

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

FELHASZNÁLÓI ÚTMUTATÓ

FELHASZNÁLÓI ÚTMUTATÓ FELHASZNÁLÓI ÚTMUTATÓ VÉRADÁS IDŐPONT SZERKESZTŐ (verzió: 1.2) 2013. április 1. Tartalomjegyzék 1. Telepítés és indítás... 3 2. Frissítés... 3 3. Beállítás... 4 4. Felület... 4 5. Véradó helyszínek...

Részletesebben

AirPrint útmutató. Ez a dokumentáció a tintasugaras modellekre vonatkozik. 0 verzió HUN

AirPrint útmutató. Ez a dokumentáció a tintasugaras modellekre vonatkozik. 0 verzió HUN AirPrint útmutató Ez a dokumentáció a tintasugaras modellekre vonatkozik. 0 verzió HUN Vonatkozó modellek Ez a Használati útmutató a következő modellekre vonatkozik. MFC-J450DW Megjegyzések meghatározása

Részletesebben

Elektronikusan hitelesített PDF dokumentumok ellenőrzése

Elektronikusan hitelesített PDF dokumentumok ellenőrzése Elektronikusan hitelesített PDF dokumentumok ellenőrzése Adobe Reader beállítása és használata a hitelesített PDF dokumentumok ellenőrzéséhez A dokumentáció szabadon tovább terjeszthető, a legfrissebb

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma

Részletesebben

Programozási alapismeretek 4.

Programozási alapismeretek 4. Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

iphone és Android két jó barát...

iphone és Android két jó barát... iphone és Android két jó barát... Multiplatform alkalmazásfejlesztés a gyakorlatban Kis Gergely MattaKis Consulting 1 Tartalom Miért multiplatform fejlesztés? Multiplatform fejlesztési módszerek A közös

Részletesebben

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás Objektum orientáltság alapjai Objektum: A való világ egy elemének ábrázolása, amely minden esetben rendelkezik: Állapottal,Viselkedéssel,Identitással

Részletesebben

Tartalomjegyzék. I. rész: Bevezetés. A szerzőről... xvii. Köszönetnyilvánítás... xix. Bevezetés... xxi. 1. Bevezetés az iphone programozásába...

Tartalomjegyzék. I. rész: Bevezetés. A szerzőről... xvii. Köszönetnyilvánítás... xix. Bevezetés... xxi. 1. Bevezetés az iphone programozásába... A szerzőről... xvii Köszönetnyilvánítás... xix Bevezetés... xxi Kinek szól ez a könyv?... xxii Mivel foglalkozik ez a könyv?... xxii Hogyan épül fel ez a könyv?... xxv Mi szükséges a könyv használatához?...

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

Részletesebben

Tartalomjegyzék. 1. Belépés a www.akademiai.hu-n vásárolt e-könyvek eléréséhez. 2. A könyvespolc. 3. Az olvasó nézet

Tartalomjegyzék. 1. Belépés a www.akademiai.hu-n vásárolt e-könyvek eléréséhez. 2. A könyvespolc. 3. Az olvasó nézet Tartalomjegyzék 1. Belépés a www.akademiai.hu-n vásárolt e-könyvek eléréséhez 2. A könyvespolc 3. Az olvasó nézet 3.1. A lapozás, a helyi menü megjelenítése 3.2. A helyi menü opciói 3.3. Hivatkozások és

Részletesebben

POSZEIDON dokumentáció (1.2)

POSZEIDON dokumentáció (1.2) POSZEIDON dokumentáció (1.2) Bevezetés a Poszeidon rendszer használatába I. TELEPÍTÉS Poszeidon alkalmazás letölthető: www.sze.hu/poszeidon/poszeidon.exe Lépések: FUTTATÁS / (FUTTATÁS) / TOVÁBB / TOVÁBB

Részletesebben

Vodafone-os beállítások Android operációs rendszer esetében

Vodafone-os beállítások Android operációs rendszer esetében Vodafone Magyarország zrt. 1096 Budapest, Lechner Ödön fasor 6. Vodafone-os beállítások Android operációs rendszer esetében Tartalom: Internet MMS SMS Gmail fiók beállításai Vodamail fiók beállításai Jelmagyarázat

Részletesebben

Android Wear programozás. Nyitrai István nyitrai.istvan@bmeautsoft.hu

Android Wear programozás. Nyitrai István nyitrai.istvan@bmeautsoft.hu Android Wear programozás Nyitrai István nyitrai.istvan@bmeautsoft.hu Amiről szó lesz A platformról dióhéjban Felületi újdonságok Fejlesztői környezet beállítása Értesítések Példa #1 Kommunikáció Példa

Részletesebben

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig

Részletesebben

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43 a TávTagTár programhoz Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43 Tartalomjegyzék Futási feltételek... 3 Telepítés... 3 Indítás... 3 Főablak... 4 Új személy felvétele...

Részletesebben

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,

Részletesebben

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor. Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb

Részletesebben

SP-1101W Quick Installation Guide

SP-1101W Quick Installation Guide SP-1101W Quick Installation Guide 06-2014 / v1.2 1 I. Termékinformációk... 3 I-1. A csomag tartalma... 3 I-2. Elülső panel... 3 I-3. LED állapota... 4 I-4. Kapcsoló-státusz gomb... 4 I-5. Termékcímke...

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2010/2011-2 félév, 11. gyakorlat (az előző 2 gyak közül az egyiken ZH volt, a másik szünet miatt elmaradt) 1 JAR fájl készítés A JAR (Java

Részletesebben

KIRA. KIRA rendszer. Telepítési útmutató v1

KIRA. KIRA rendszer. Telepítési útmutató v1 KIRA rendszer Telepítési útmutató v1 1. Bevezetés A dokumentáció, illetve a dokumentáció mellékleteként megtalálható állományok segítségével készíthető fel a kliens oldali számítógép a KIRA rendszer működtetésére.

Részletesebben

C programozási nyelv

C programozási nyelv C programozási nyelv Előfeldolgozó utasítások Dr Schuster György 2011 május 3 Dr Schuster György () C programozási nyelv Előfeldolgozó utasítások 2011 május 3 1 / 15 A fordítás menete Dr Schuster György

Részletesebben

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozási nyelv Pointerek, tömbök, pointer aritmetika C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek

Részletesebben

Importálás. más típusú (pl:.imp,.xml,.xkr,.xcz) állomány beimportálása a nyomtatványkitöltő programba

Importálás. más típusú (pl:.imp,.xml,.xkr,.xcz) állomány beimportálása a nyomtatványkitöltő programba Importálás Külső programok által generált imp és.xml állományokat be lehet tölteni a program import funkcióival. Az ABEV2006 az xml állományok importálását nem tudta. Ez újdonság a nyomtatványkitöltő programban.

Részletesebben

A Novitax ügyviteli programrendszer első telepítése

A Novitax ügyviteli programrendszer első telepítése Telepítő fájl letöltése honlapunkról A Novitax ügyviteli programrendszer első telepítése A honlapunkon (www.novitax.hu) található telepítő fájlt (novitax2007-setup.exe) le kell tölteni a számítógép egy

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Swing GUI készítése NetBeans IDE segítségével Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Bevezető Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi

Részletesebben

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg. KIINDULÁS Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg. Programozás III Az egyszerűség kedvéért mindegyiket a nevük alapján regisztráljuk,

Részletesebben

Tartalomjegyzék... 1 Az alakalmazás letöltése... 2 Regisztráció... 3 Kapcsolódás (helyi vezérlés):... 4

Tartalomjegyzék... 1 Az alakalmazás letöltése... 2 Regisztráció... 3 Kapcsolódás (helyi vezérlés):... 4 Tartalomjegyzék Tartalomjegyzék... 1 Az alakalmazás letöltése... 2 Regisztráció... 3 Kapcsolódás (helyi vezérlés):... 4 Kapcsolódás vezeték nélküli routerrel (távoli vezérlés)... 5 Android:... 5 ios:...

Részletesebben

GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ Készítette A jelen dokumentum tartalma szerzői jogi védelem alatt áll, a mű felhasználói jogai a -t illetik. A dokumentumot az Ügyfél korlátlan számban

Részletesebben

Portforward beállítási segítség

Portforward beállítási segítség Portforward beállítási segítség Portforwardra olykor lehet szükségünk, hogyha otthonról érjünk el olyan weboldalakat melyek egyébként csak az ELTE hálózatából tölthetőek le, illetve csak Magyarországról

Részletesebben

Használati utasítás.

Használati utasítás. Lotus Notes Naptár Windows telefonra Használati utasítás. Írta: Varga Róbert 1 http://www.robertwpapps.uw.hu Bevezetés: Ezt az alkalmazást a fejlesztő saját használatra írta a teljesség igénye nélkül.

Részletesebben

Felhasználói kézikönyv. Verzió: 1.01

Felhasználói kézikönyv. Verzió: 1.01 Felhasználói kézikönyv Verzió: 1.01 Tartalomjegyzék Általános áttekintés 3 A DocGP rendszer célja 3 A rendszer által biztosított szolgáltatások 3 A felhasználói felület elérése 3 JAVA JRE telepítése 3

Részletesebben

WIN-TAX programrendszer frissítése

WIN-TAX programrendszer frissítése WIN-TAX programrendszer frissítése A WIN-TAX programrendszert a verzió érvényességének lejártakor illetve jelentősebb változás esetén (pl.: elkészült fejlesztések, munkahelyi hálózati szinkronitás miatt)

Részletesebben

VARIO Face 2.0 Felhasználói kézikönyv

VARIO Face 2.0 Felhasználói kézikönyv VARIO Face 2.0 Felhasználói kézikönyv A kézikönyv használata Mielőtt elindítaná és használná a szoftvert kérjük olvassa el figyelmesen a felhasználói kézikönyvet! A dokumentum nem sokszorosítható illetve

Részletesebben

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek JAVA EA+GY 1. gyakolat Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program

Részletesebben

7. fejezet: Mutatók és tömbök

7. fejezet: Mutatók és tömbök 7. fejezet: Mutatók és tömbök Minden komolyabb programozási nyelvben vannak tömbök, amelyek gondos kezekben komoly fegyvert jelenthetnek. Először is tanuljunk meg tömböt deklarálni! //Tömbök használata

Részletesebben

Internetkonfigurációs követelmények. A számítógép konfigurálása. Beállítások Windows XP alatt

Internetkonfigurációs követelmények. A számítógép konfigurálása. Beállítások Windows XP alatt Internetkonfigurációs követelmények Annak érdekében, hogy csatlakoztatni tudja a Hozzáférési Pontját a Hozzáférési Pont Kezelőhöz, a következő konfigurációs paramétereket kell beállítania a számítógépe

Részletesebben

ServiceTray program Leírás

ServiceTray program Leírás ServiceTray program Leírás Budapest 2015 Bevezetés szerviz munkalapok státuszai a Törölve és Lezárva státuszt leszámítva a munkalap különböző nyitott állapotát jelzik, melyek valamilyen tevékenységet jeleznek.

Részletesebben