You are on page 1of 420

2013

Ti Liu Hng Dn Xy Dng ng Dng iPhone

Nguyn Anh Tip - Cao Thanh Vng i Hc Lc Hng 20/11/2013

M C L C

CHNG I CHUN B TRC KHI BT U XY DNG NG DNG ........... 1 1.1 CHUN B H IU HNH MAC OS .................................................................... 2 1.1.1 Lp Trnh ng Dng Iphone Trn Windows .................................................. 2 1.1.2 S Dng Sn Phm Chnh Hng Apple............................................................ 3 1.1.3 Chy H iu Hnh Mac Os Trn Pc/Laptop Intel/Amd Ti Sao Khng? ....................................................................................................................................... 5 1.2 PHN MM XCODE .................................................................................................. 7 1.2.1 Ci t Thng Qua Bn Ti V T Trang Dnh Cho Developer .................. 8 1.2.2 Ci t Thng Qua Apple Mac Store ............................................................. 10 1.2.3 Ci t T Bn Xcode c Chia S Trn Internet .................................... 11 CHNG II TM HIU XCODE V IOS SIMULATOR ......................................... 12 2.1 TM HIU XCODE 5 ................................................................................................ 13 2.1.1 Gii Thiu V Xcode 5 ..................................................................................... 13 2.1.2 Thao Tc To ng Dng Mi ......................................................................... 16 2.1.3 Tm Hiu Giao Din Xcode V Mt S Tnh Nng ....................................... 20 2.1.4 Thit K Giao Din ........................................................................................... 26 2.1.5 Vit Code ........................................................................................................... 29 2.1.6 Thc Thi V Kim Tra Li Ca ng Dng ................................................... 34 2.2 TM HIU IOS SIMULATOR ................................................................................. 38 2.2.1 Gii Thiu iOS Simulator ................................................................................ 38 2.2.2 Tm Hiu iOS Simulator .................................................................................. 38 CHNG III NGN NG OBJECTIVE-C ................................................................ 48 3.1 GII THIU NGN NG OBJECTIVED-C ........................................................ 49 3.2 KHAI BO BIN - CCH S DNG ..................................................................... 49 3.2.1 Bin ..................................................................................................................... 49 3.2.2 Quy Tc t Tn ............................................................................................... 50 3.3 KIU D LIU .......................................................................................................... 50

3.4 PHP TON ............................................................................................................... 51 3.5 CH THCH CODE .................................................................................................. 51 3.6 XUT D LIU RA MN HNH ............................................................................ 52 3.7 FUNCTION ................................................................................................................. 54 3.7.1 nh Ngha ......................................................................................................... 54 3.7.2 Phng Thc Khng C Tham S Truyn Vo ........................................... 54 3.7.3 Phng Thc C 1 Tham S Truyn Vo ...................................................... 55 3.7.4 Phng Thc C Nhiu Tham S Truyn Vo.............................................. 55 3.8 CU TRC IU KIN ........................................................................................... 57 3.8.1 Cu Lnh If ....................................................................................................... 57 3.8.2 Cu Lnh If Else ............................................................................................ 57 3.8.3 Cu Lnh Switch - Case ................................................................................... 58 3.9 Cu Trc Lp .............................................................................................................. 59 3.9.1 Vng Lp For .................................................................................................... 59 3.9.2 Vng Lp While ................................................................................................ 59 3.9.3 Vng Lp Do-While .......................................................................................... 60 3.10 MNG........................................................................................................................ 61 3.10.1 nh Ngha ....................................................................................................... 61 3.10.2 Mng Nsarray ................................................................................................. 61 3.11 CHUI I TNG NSSTRING...................................................................... 62 3.11.1 Khi To Chui............................................................................................... 62 3.11.2 i Tng NSString ....................................................................................... 63 3.11.3 Tm Kim Bn Trong Chui .......................................................................... 63 3.11.4 Tm Chui V Thay N Thnh Chui Khc ................................................ 64 3.11.5 Xo Ni Dung Bn Trong Chui ................................................................... 64 3.11.6 Ct Chui ......................................................................................................... 65 3.11.7 Chn K T Vo Trong Chui ...................................................................... 66 3.11.8 Chn K T Vo Cui Chui ........................................................................ 66 3.11.8 So Snh Chui ................................................................................................. 67 3.11.9 So Snh Chui Vi K T u V Cui Chui ........................................... 67

3.11.10 Chuyn i Hnh Dng Ca Ch................................................................ 68 3.11.11 Chuyn Chui Thnh Dng S .................................................................... 70 CHNG IV MT S THAO TC C BN ............................................................. 72 4.1 APP ICON LOADING SCREEN .......................................................................... 73 4.1.1 App Icon............................................................................................................. 73 4.1.2 Loading Screen .................................................................................................. 75 4.2 THAY I APP NAME ............................................................................................ 76 4.3 N STATUS BAR ...................................................................................................... 78 4.4 BACKGROUND ......................................................................................................... 79 4.4.1 Background Image............................................................................................ 79 4.4.2 Background Color ............................................................................................ 83 4.5 THM FRAMEWORK ............................................................................................. 84 CHNG V MT S I TNG C BN ............................................................ 86 5.1 I TNG LABEL BUTTON TEXT FIELD ............................................... 87 5.1.1 Gii Thiu .......................................................................................................... 87 5.1.2 V D .................................................................................................................. 90 5.2 KT NI C S D LIU VI SQLITE ............................................................. 94 5.2.1 Gii Thiu .......................................................................................................... 94 5.2.2 Ci t Sqlite Manager Cho Firefox .............................................................. 94 5.2.3 Cu Hnh ng Dng Tng Tc Vi Sqlite ............................................. 95 5.2.4 Cc Hm Trong Sqlite ...................................................................................... 96 5.2.5 V D .................................................................................................................. 99 5.3 S DNG CAMERA IPHONE .............................................................................. 109 5.3.1 Gii Thiu ........................................................................................................ 109 5.3.2 V D ................................................................................................................ 109 5.4 UIIMAGE .................................................................................................................. 113 5.4.1 Gii Thiu ........................................................................................................ 113 5.4.2 Cc nh Dng nh H Tr Trn Iphone ................................................... 114 5.4.3 V D ................................................................................................................ 114 5.5 UIALERT VIEW ...................................................................................................... 121

5.5.1 Gii Thiu ........................................................................................................ 121 5.5.2 c im.......................................................................................................... 121 5.5.3 V D ................................................................................................................ 122 5.6 UISLIDER ................................................................................................................. 124 5.6.1 Gii Thiu ........................................................................................................ 124 5.6.2 c im.......................................................................................................... 125 5.6.3 V D ................................................................................................................ 125 5.7 UIWEBVIEW ........................................................................................................... 128 5.7.1 Gii Thiu ........................................................................................................ 128 5.7.2 V D ................................................................................................................ 129 5.8 ACTIVITY INDICATOR VIEW ............................................................................ 132 5.8.1 Gii Thiu ........................................................................................................ 132 5.8.2 V D ................................................................................................................ 132 5.9 ACTIONSHEET ....................................................................................................... 136 5.9.1 Gii Thiu ........................................................................................................ 136 5.9.2 c im.......................................................................................................... 136 5.9.3 V D ................................................................................................................ 137 5.10 MK MAP VIEW ..................................................................................................... 138 5.10.1 Gii Thiu ...................................................................................................... 138 5.10.2 V D .............................................................................................................. 139 5.11 TABLE VIEW CONTROLLER ........................................................................... 143 5.11.1 Gii Thiu ...................................................................................................... 143 5.11.2 V D .............................................................................................................. 143 5.12 SEARCH BAR ........................................................................................................ 147 5.12.1 Gii Thiu ...................................................................................................... 147 5.12.2 V D .............................................................................................................. 148 5.13 TRUYN D LIU GIA CC VIEW .............................................................. 152 5.13.1 Gii Thiu ...................................................................................................... 152 5.13.2 V D .............................................................................................................. 152 CHNG VI HNG DN XY DNG PHN MM .......................................... 157

6.1 PHN MM KIM TRA M VIN ........................................................................ 158 6.1.1 Gii Thiu ........................................................................................................ 158 6.1.2 Chun B .......................................................................................................... 158 6.1.3 Cu Trc Phn Mm ...................................................................................... 158 6.1.4 C Ch Vn Hnh ........................................................................................... 159 6.1.5 Tnh Nng ........................................................................................................ 160 6.1.6 Tin Hnh ........................................................................................................ 163 6.2 PHN MM TM KIM A IM XUNG QUANH (PLACESNEARME) .. 220 6.2.1 Gii Thiu ........................................................................................................ 220 6.2.2 Chun B .......................................................................................................... 220 6.2.3 Cu Trc Phn Mm ...................................................................................... 220 6.2.4 C Ch Vn Hnh Ca Placesnearme .......................................................... 221 6.2.5 Tnh Nng ........................................................................................................ 222 6.2.6 Tin Hnh ........................................................................................................ 226 CHNG VII A NG DNG LN IPHONE ...................................................... 385 7.1 GII THIU ............................................................................................................. 386 7.2 QU TRNH CHUN B ........................................................................................ 386 7.3 TIN HNH ............................................................................................................. 388 CHNG VIII MT S VN KHC ................................................................ 396 8.1 XY DNG NG DNG CHO IOS 6 - IOS 6.1 TRN XCODE 5 ................... 397 8.2 XY DNG NG DNG H TR NHIU VERSION IOS ............................. 403 CU HI THNG GP ............................................................................................ 407 PH LC ........................................................................................................................ 411

LI M U
Ngy nay xu hng s dng Smartphone v my tnh bng ang gia tng nhanh chng trn th gii ni chung v Vit Nam ni ring, trong Vit Nam hin ang ng th hai th gii v tc tng trng smartphone & my tnh bng vi tc tng trng 266%. Android, iOS, Windows Phone l nhng h iu hnh chy trn Smartphone v my tnh bng ph bin nht th gii: Android 75%, iOS 17,3%, Windows Phone 3,2%. Ti Vit Nam, theo nghin cu ca IDC, vo thi im qu 2/2013, iOS ang chim t l 1.6% trn tng s thit b phn phi ti Vit Nam, ng th ba sau Android v Windows Phone. Cng vi s tng trng ca Smartphone v cc h iu hnh chy trn Smartphone, s lng ng dng cho cc h iu hnh ngy cng tng, tnh cho n ht nm 2012, s lng ng dng iOS trn Apple App Store hn 775.000 ng dng v Google Play c hn 700.000 ng dng.Vi s pht trin quy m ln ca ng dng, nhu cu tm hiu v lp trnh ng dng cho cc h iu hnh cng tng dn. Tuy nhin, thc tin cho thy, vic tm hiu cng nh tham gia cc lp hc v lp trnh ng dng iPhone Vit Nam cn nhiu hn ch v kh khn.Cc lp dy lp trnh ng dng iPhone ch mi xut hin nhiu trong thi gian gn y, do s lng vn cn hn ch. Bn cnh ngun ti liu ting Vit cn t, vic tm hiu v s dng cng c lp trnh cng nh tham kho ti liu ting Anh v lp trnh ng dng iPhone i hi ngi tm hiu phi tiu tn mt khong thi gian di cng nh c mt t hiu bit v lp trnh v kh nng c hiu ting Anh tt. Hn na cc ti liu ting Vit do cc trung tm ging dy lp trnh iPhone bin son ch lu hnh ni b, ngi tm hiu buc phi chi mt khon tin tham d lp hc mi c th c c nhng ti liu ny. Vi mong mun tm hiu cch xy dng ng dng iPhone c thm kin thc mi, gip ch cho qu trnh lm vic sau khi ra trng cng nh gim bt nhng kh khn cho ngi mi bt u tm hiu v lp trnh ng dng trn iPhone, nhm nghin cu thc

hin nghin cu, xy dng mt s ng dng trn iPhone da trn kin thc tm hiu c, t tng hp v xy dng thnh ti liu Hng dn xy dng ng dng trn iPhone. Vi nhng v d ring cho tng i tng, ngi c s d dng nm bt v hiu r cch s dng, chc nng ca tng i tng khc nhau. Bn cnh ti liu cn km theo hng dn chi tit tng bc xy dng mt vi ng dng thc t m nhm nghin cu thc hin c trong qu trnh nghin cu. Hi vng rng ni dung ca ti liu ny s gip ch phn no cho mi ngi khi bt u tm hiu v lp trnh iPhone, t c th tit kim bt thi gian cho qu trnh tm hiu. Mi kin ng gp xin lin lc qua email caothienmokimlong@gmail.com hoc anhtiep20@gmail.com. Rt mong nhn c s gp chn thnh t mi ngi ti liu hng dn ngy cng hon thin hn. Nhm nghin cu Nguyn Anh Tip Cao Thanh Vng

CHNG I CHUN B TRC KHI BT U XY DNG NG DNG Qu trnh chun b trc khi bt u lp trnh ng dng trn iPhone l qu trnh c bn m bn phi chun b cho tht k lng. Qu trnh ny s chun b cho bn cc iu kin cn thit c th thun li bt u tm hiu v lp trnh ng dng trn iPhone. Trong chng ny, bn s c gii thiu s lc v qu trnh chun b, cc cch thc bn c c h iu hnh Mac OS v b cng c Xcode. Hai iu kin ny l iu kin cn thit bt u lp trnh iOS. Tuy nhin ni dung phn chun b h iu hnh Mac OS ch c gii thiu s lc vi bn cc cch thc c c mt h iu hnh Mac OS n nh (cch thc ci t Mac OS trn thit b Intel/AMD) cho vic lp trnh ch khng i sau vo hng dn c th bi iu thuc v mt lnh vc kin thc khc i hi phi o su tm hiu.

1.1 CHUN B H IU HNH MAC OS Vic lp trnh ng dng cho iPhone i hi bn phi s dng b cng c do chnh Apple cung cp gi l Xcode, v b cng c ny chy trn nn tng ca h iu hnh Mac OS. Nu bn mun bt u cho vic xy dng ng dng cho iPhone th bn nn bt u ngay vi vic chun b cho mnh mt chic my chy h iu hnh Mac OS. Sau y chng ti s gii thiu cho bn mt s cch thc bn c th s hu cho mnh mt h iu hnh Mac OS ph hp. 1.1.1 Lp Trnh ng Dng Iphone Trn Windows Nu bn mun lp trnh ng dng cho iPhone, nhng li mun thc hin trn mi trng Windows c th thao tc thm cc cng vic khc trn mi trng ny, la chn tt nht cho bn lc ny chnh l s dng mt my o chy h iu hnh Mac OS lp trnh. Tuy nhin nu bn la chn phng n ny, cu hnh my ca bn phi mnh, CPU x l tt, v bn nn dnh t nht 2G RAM cho my o hot ng tt hn. Lm cch no ti c th s hu mt my o chy Mac OS cho ring mnh? Bn c hai cch c th s hu mt my o chy Mac OS cho mnh. Cch mt l bn chun b mt a ci Mac OS v phn mm h tr to my o nh VMWare , Virtualbox sau bn tin hnh ci t bnh thng bng tay. a ci t Mac OS bn c th mua cc tim bn a phn mm. Hoc bn c th ti v trn mng mt a ci Mac OS ui .iso ( Thng th trn mng c a ci ui .dmg, bn phi chuyn i qua ui .iso c h tr tt nht t phn mm to my o). Cch th hai l bn ti v mt my o hon chnh c ci t sn Mac OS, sau m ln bng phn mm chy my o l bn c th c mt h iu hnh Mac OS. Bn nn truy cp vo Din n Tinh T: www.tinhte.vn/forums/chuyen-de-hackintosh.361/ . Cng ng Hackinosh: www.facebook.com/groups/hackintoshvietnam/.

tm hiu thm tin trnh ci t my o, cc vn xy ra trong qu trnh ci. Ngoi ra bn cng c th tm cc my o chy Mac OS ci t sn ti Soul Dev Team: http://www.souldevteam.net/ . 1.1.2 S Dng Sn Phm Chnh Hng Apple Nu gia nh bn c iu kin, bn c th mua ngay cho mnh mt chic my Apple chnh hng, s dng trn vn tnh nng cng nh s h tr ti a t Apple. Bn truy cp vo www.apple.com , chn Store, sau la chn Shop Mac n chuyn mc bn cc sn phm chy Mac OS ca Apple. Ti y bn c th la chn nhiu loi sn phm khc nhau nh Macbook Air, Macbook Pro, iMac, Mac mini.

Hnh 1.1 Truy cp Store Mac OS Ty theo s thch v nhu cu, cng nh kh nng ti chnh m bn la chn cho mnh mt chic my thch hp. Bn c th thanh ton cho Apple v i hng c chuyn v, hoc tm n cc trung tm bn hng ca Apple gn nh mua. Hoc bn cng c th truy cp vo a ch www.apple.com/asia/reseller/ tm kim cc a im bn hng ca Apple gn nht. Vit Nam, bn hy truy cp vo trang
3

www.icenter.com.vn c th nhanh chng tm c ca hng bn sn phm ca Apple gn nht ni bn sng. Vic ny gip bn c th nhanh chng c trong tay mt sn phm chnh hng Apple, thanh ton tin li m khng phi tn thi gian cho vic chuyn khon thanh ton cng nh ch i vn chuyn sn phm t nc ngoi v. Nu mun tit kim thm chi ph bn c th truy cp www.store.apple.com/us/browse/home/specialdeals/mac tm mua cc gim phm Refurbished ca Apple vi mc gi thp hn.

Hnh 1.2 Store Refurbished Nu bn mun mua my chnh hng Apple vi gi r hn na, th vic mua li sn phm qua s dng l mt gi ng cho bn cn nhc. i vi vic mua li my qua s dng bn c th vo mt s trang mua bn c cht lng tm mua sn phm ph hp vi ti tin. Chng hn nh cc trang www.5giay.vn, www.nhattao.com .. l cc trang vi rt nhiu s chn, cc dng my a dng cng nh mc tin khc nhau, ty theo nhu cn v iu kin cho php m bn c th tm c mt chic my ng mnh.

Hnh 1.3 Mua li my c Nu bn la chn mua my c, phi la chn tht k lng t i my n cu hnh, tt nht nn chn mua nhng my sn xut trong 1-2 nm gn nht, c bit bn phi kim tra xem my mnh mun mua c h tr nhng phin bn Mac OS no. V sao phi nh vy ? Bi v Xcode 5 chy trn Mac OS 8 tr ln, nu bn chn mua my ch h tr Mac OS 7 tr v trc, th bn khng th ci c Xcode 5 m ch c th s dng cc phin bn thp hn. 1.1.3 Chy H iu Hnh Mac Os Trn Pc/Laptop Intel/Amd Ti Sao Khng? Vic ci Mac OS ln chic PC hay laptop ca bn cng l mt phng php tt va c c h iu hnh Mac OS, va c thm kinh nghim trong qu trnh ci t, v hn na l tit kim c chi ph. C hai dng ci t hackintosh l ci t t mt bn c chnh sa sn nh iAtkos ( h tr dng my intel ) hay Niresh (h tr thm dng my AMD) v ci t t a gc ca Apple (Mac OS Retail) . Dng ci t t a gc ca Apple i hi bn sau khi ci t phi tin hnh thm nhiu thao tc khc c th c
5

c mt h iu hnh Mac OS hon thin, cn i vi bn chnh sa sn th gn nh khng iu chnh thm nhiu.

Hnh 1.4 iATKOS v Niresh Bn c hai phng n la chn nu mun chy Mac OS ln my ca mnh: t ci th cng v thu ngi ci t. Nu bn thu ngi ci t, chi ph thng khong t 100.000 vn n 200.000 vn ty theo yu cu ci t nh th no.

Hnh 1.5 Tm kim Ci t Mac OS cho PC/Laptop

Vi vic thu ngi ci, bn ch gn bo cu hnh my cho ngi ci t h quyt nh v cho bn li khuyn. Bi vic ci t Hackintosh ph thuc rt nhiu vo tng thch phn cng ca thit b vi h iu hnh Mac OS, do khng phi my no cng c th ci c. Tuy nhin phng n ny gip bn vt v hn, cng nh tit kim c thi gian hn. Mt phng n khc l bn t ci. Vi cch la chn ny, bn phi tm hiu v Hackintosh, cng nh cc lu khi ci t, cc li xy ra v cch khc phc Nu bn la chn cch ny, bn nn tm hiu mt s din n, hi nhm chuyn v Hackintosh c thm kin thc, kinh nghim v s tr gip t cng ng. y chng ti gii thiu cho bn hai a ch uy tn v Hackintosh: - Chuyn Hackintosh trn Tinh T a ch: www.tinhte.vn/forums/chuyende-hackintosh.361/ - Group Hackintosh We Love Mac a ch: www.facebook.com/groups/hackintoshvietnam/ Ti y bn s tm c nhiu ti liu hng dn cng nh s gip tn tnh ca mi ngi, hi vng bn s c mt h iu hnh Mac OS hon chnh. Bn c bit: - Phn cng ca my tnh rt quan trng khi quyt nh ci Mac OS ln my tnh thng thng v khng phi phn cng no cng c th tm c Kext (C th hiu ging nh Driver cho thit b trn h iu hnh Windows. - Card VGA Intel Graphic HD 4000 v Intel Graphic HD 3000 c Mac OS h tr Kext rt tt. - a phn dng HP Probook h tr tt Hackintosh. 1.2 PHN MM XCODE Sau khi bn c c h iu hnh Mac OS, vic tip theo bn phi lm trc khi c th bt u lp trnh ng dng iPhone l ci b cng c lp trnh Xcode do Apple cung
7

cp cho cc nh lp trnh ng dng, cc nh lp trnh c th pht trin ng dng cho c iOS ln Mac OS. Vic ci t Xcode c nhiu cch, ty theo bn chn la cch no ph hp vi bn thn. 1.2.1 Ci t Thng Qua Bn Ti V T Trang Dnh Cho Developer Bn truy cp vo trang www.developer.apple.com tin hnh ti phin bn Xcode mi nht ( hoc cc phin bn khc ty theo nhu cu ca bn).

Hnh 1.6 Ti Xcode t trang Developer Tip theo bn la chn View Download.

Hnh 1.7 Chn View Download Apple s yu cu bn ng nhp ti khon Developer ID tip tc.

Hnh 1.8 ng nhp Developer ID Sau khi bn ng nhp bng ti khon Developer xong, thc hin theo hng dn, bn s ti v c phn mm Xcode v tin hnh ci t trn my.

Vi ti khon Developer ID vi gi 99$ / nm, bn s lun c Apple cp nht thng tin cng ngh mi, cng nh h tr, s dng trc cc phin bn mi ca Apple nh cc bn preview iOS, Mac OS, Xcode 1.2.2 Ci t Thng Qua Apple Mac Store y l cch ph bin nht, v vic ti Xcode trn Apple Store l min ph, v ch cn bn c mt ti khon Apple ID l c, khng yu cu phi l Developer ID. Bn ch cn truy cp vo Apple Mac Store v tm kim Xcode, bn s thy kt qu l phn mm Xcode Free, cng vic by gi l bn ch cn Install v ch i hon tt.

Hnh 1.9 Ci t Xcode qua Apple Mac Store

10

Trong App Store bn cng c th tm c nhiu gio trnh, bi ging v lp trnh ng dng bng Xcode. 1.2.3 Ci t T Bn Xcode c Chia S Trn Internet i vi cch ci t ny, bn ch cn truy cp internet v tm bn ci t Xcode c chia s trn mng v ti v ci t trn my ca bn. Tuy nhin bn s mt thi gian tm kim trn internet tm c bn ci t va , tc ti tt nht.

11

CHNG II TM HIU XCODE V IOS SIMULATOR Chng ny s mang n cho bn kin thc v b cng c Xcode cng nh cng c gi lp h iu hnh iOS l iOS Simulator. Qua nhng kin thc c cung cp, bn s nm r v giao din, mt s tnh nng, cc button v cng dng ca n trn Xcode v iOS Simulator. Ngoi ra, bn s c hng dn mt s thao tc c bn khi s dng Xcode, iOS Simulator t bn s d dng hn trong vic s dng b cng c ny trong qu trnh lp trnh ng dng iPhone v sau.

2.1 TM HIU XCODE 5 2.1.1 Gii Thiu V Xcode 5 Phn mm Xcode l b cng c do Apple cung cp cho cc lp trnh vin lp trnh ng dng cho cc thit b chy h iu hnh ca Apple. Phin bn mi nht hin nay ca Xcode l bn Xcode 5 trn trang Developer ca Apple.

Hnh 2.1 Phin bn Xcode 5 trn trang Apple Giao din lm vic ca Xcode gm c 5 phn chnh : Toolbar, Editor area, Navigator area, Debug area, Utility area. - Debug area : y l vng h tr bn trong qu trnh debug li ca chng trnh. - Toolbar area: vng cha cc cng c tin ch gip bn c th n gin trong vic chy, debug ng dng, la chn iOS Simulator, ng m cc vng khc - Editor area: vng bn thit k giao din, vit v chnh sa code ca chng trnh. - Utility area: vng ny cho php bn ty chnh cc tham s, gi tr ca cc i tng trn giao din, cng nh cho php bn ko th v s dng cc i tng
13

c sn ca Xcode nh Button, Label, Slider hay cc on code mu ( If, Switch). - Navigator area: cung cp cho bn mt cch nhn trc quan, tin li cho vic qun l ng dng, xem thng bo li, tm kim mt on code trong chng trnh hay kim tra mc hot ng ca RAM, CPU khi chy ng dng

Hnh 2.2 Giao din Xcode Xcode cng cung cp cho bn mt ch g li thng minh h tr bn trong vic pht hin li, cnh bo li v gi thay th khc phc

14

Hnh 2.3 Ch g li Hn th na, km theo Xcode l mt b ti liu hng dn tng bc, chi tit v tin li nhm h tr ngi dng trong vic lp trnh. Trong qu trnh vit ng dng, nu bn mun tm hiu thm mt i tng, bn c th s dng ti b ti liu ny c c hng dn, v d minh ha d hiu.

Hnh 2.4 Ti liu hng dn


15

Bn c th xem thm ti liu v Xcode do Apple cung cp ti: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcod e_Overview/About_Xcode/about.html 2.1.2 Thao Tc To ng Dng Mi Khi khi ng Xcode ln, giao din hin ra cho php bn to mt project mi, hoc m li cc project gn y.

Hnh 2.5 Giao din Xcode khi m ln Ti giao din Xcode, bn c th to mi mt project bng cch chn Create new project. Ngoi ra bn c th to project mi bng cch chn File > New > Project.

16

Hnh 2.6 To mi Project bng Menu Sau khi chn New Project, Xcode s yu cu bn la chn mt hnh thc cho Project ny (ng dng cho iPhone hay Mac OS, Single View hay Empty View). Cch n gin nht l bn chn Single View.

Hnh 2.7 Chn la mu cho project

17

Tip theo bn in thm mt vi thuc tnh ca Project nh Product Name, Organization Name, Company Identifer. Sau bn tin hnh la chn Devices cho Project (iPhone, iPad hay Universal vit ng dng cho c hai).

Hnh 2.8 in thng tin cho project Tip theo bn chn ni lu tr Project trn my tnh lu Project v chn Create.

18

Hnh 2.9 Chn ni lu Project Nh vy bn to xong mt Project mi.

Hnh 2.10 Giao din project mi to


19

2.1.3 Tm Hiu Giao Din Xcode V Mt S Tnh Nng 2.1.3.1 Navigator Area Navigator area cho php bn qun l ng dng hiu qu nh qun l cc tp tin, th mc, qun l cc thng bo li v cnh bo, qun l vic debugC th chia Navigator area thnh hai phn chnh l Navigator selector bar v Content area.

Hnh 2.11 Giao din Navigator Trong Navigator selector bar gm mt s button chnh sau: - Project Navigator ( ): dng qun l cc tp tin ca ng dng nh thm,

xa, gom nhmCc tp tin qun l s c th hin trong Content area.

20

- Find Navigator (

): s dng tm kim mt cch nhanh chng cc string

trong ng dng, tm kim ni dung m rng. - Issue Navigator ( - Debug Navigator( 2.1.3.2 Editor Area Editor area cho php bn thit k giao din, vit v sa code cho ng dng. Khi bn chn tp tin storyboard bn Content area th Editor area s hin th giao din Interface Builder cho bn thit k giao din. Tng t vi tp tin .m v .h th Editor area s hin th ni dung code ca tp tin. ): qun l cc thng bo li, cnh bo ca ng dng. ): theo di qu trnh debug ng dng.

Hnh 2.12 Giao din ng dng

21

Hnh 2.13 Giao din code Editor area cn cho php bn qun l cc i tng trong giao din mt cch chi tit hn. Trong phn Interface Builder, bn chn button Show Document Outline ( ) bn gc tri mn hnh, bn s thy c mt vng qun l phn cp cc i tng.
22

Hnh 2.14 Giao din qun l chi tit 2.1.3.3 Toolbar Area Toolbar cho php thc hin mt s thao tc mt cch nhanh chng thng qua cc Button m khng cn phi dng ti Menu. Toolbar gm mt s thnh phn sau: - Run button ( - Stop button ( - Scheme menu ( thch hp chy ng dng. - Activity viewer: thng bo trng thi ca ng dng, cng nh hin cc trng thi li, cnh bo ca chng trnh (nu c). ): dng chy th ng dng. ): dng dng vic chy th ng dng. ): dng la chn iOS Simulator

Hnh 2.15 Activity viewer

23

- Editor selector (

): gm cc button dng iu chnh Editor area

(cho php chia i Editor area ra lm hai hay ch l mt vng duy nht). - View selector ( area, Debug area. ): dng n/hin cc vng Navigator area, Utility

Hnh 2.16 Toolbar area 2.1.3.4 Utility Area Utility area c s dng thay i cc thuc tnh ca i tng bn Interface Builder, ngoi ra cn c s dng la chn v ko th cc i tng, on code mu vo Interface Buider v Editor. Utility area c chia lm 2 vng chnh l Inspector v Library. Inspector pane l vng cho php bn c s thay i thuc tnh ca i tng. Trn u ca Inspector pane l Inspector selector bar bao gm cc button h tr bn trong vic iu chnh thuc tnh. Trn u ca Libarary pane l Libaray selector bar bao gm cc button bn c th chn la ph hp trong vic s dng cc on code mu, cc i tng.

24

Hnh 2.17 Utility area Trong Inspector selector bar, c hai button bn cn lu l Attribute ( Quick Help ( ca i tng. Trong Library selector bar, c mt s button quan trng l Code snippets ( Objects ( ), ) v

). Quick Help cho php bn tra cu mt cch nhanh chng cc i tng,

hm trong ti liu km theo ca Xcode. Attribute cho php bn thay i cc thuc tnh

). Code snippets hin th cho bn danh sch cc on code mu bn la

chn s dng trong qu trnh vit ng dng. Objects hin th cc i tng ca Xcode cho bn s dng thit k giao din ng dng.

25

2.1.4 Thit K Giao Din Giao din ng dng trong Xcode c thit k thng qua Interface Builder, cc i tng ca Interface Builder c cung cp trong Utility area. tin hnh thit k giao din, bn ko th i tng trong Utility area vo Interface Builder.

Hnh 2.18 Ko th cc i tng vo giao din Ti y bn c th iu chnh, sp xp v tr ca cc i tng theo tng thit k ca bn. Trong Xcode, tp tin bn dng thit k giao din l tp tin .storyboard. Khi ko th cc i tng vo Interface Builder, bn s d dng xc nh v tr t i tng sao cho giao din cn i, khng b hin tng lch khi Run ng dng. l nh vo tnh nng h tr canh chnh ca Xcode thng qua cc ng k t nt mu xanh.

26

Hnh 2.19 Canh chnh v tr theo ng k xanh Bn c th iu chnh cc thuc tnh ca cc i tng trong Interface Builder thng qua vng Inspector pane.

27

Hnh 2.20 Thay i thuc tnh ca i tng tm kim i tng mt cch nhanh chng, bn s dng cng c tm kim trong Library pane.

Hnh 2.21 Tm kim trong Library


28

Hn na, nu bn mun tm hiu r hn v i tng , xem v d c th minh ha, bn c th s dng n b ti liu h tr ca Xcode.

Hnh 2.22 Xem ti liu h tr ca i tng 2.1.5 Vit Code Phn code ca ng dng thng c vit trong hai tp tin l .h v .m. Tp tin .h thng c s dng kt ni v khai bo cc i tng ca Interface Builder trc khi mun s dng cc i tng ny lp trnh. Ngoi ra tp tin .h cn dng khai bo cc hm s kin trc khi s dng trong tp tin .m. Tp tin .m dng trin khai cc hm s kin m bn khai bo bn tp tin .h.

29

Hnh 2.23 Hai tp tin s dng vit code cho ng dng kt ni i tng trong Interface Builder vo tp tin .h (nh x), bn nhn kt hp Ctrl + nhp chut vo i tng v ko th vo tp tin .h.

Hnh 2.24 nh x i tng vo tp tin .h


30

Khi hp thoi hin ra, bn la chn loi kt ni cho i tng l Action hoc Outlet. Hiu mt cch n gin, i tng no m bn s dng hin th thng tin ra bn ngoi th thuc loi Outlet. i tng no m bn mun vit code khi tng tc vi i tng s cho ra kt qu m bn mun ( v d bn mun nhn vo Button s hin Hello World ) th bn s chn loi l Action. Mt i tng c th va l Action, va l Outlet ty vo ngi vit ng dng quy nh.

Hnh 2.25 La chn kiu nh x Khi bn vit code, Xcode h tr bn trong vic pht hin li v thng bo cho bn bng hnh trn mu cha du chm than ti v tr pht hin li. Ngoi ra Xcode cng c ch cnh bo bng tam gic mu vng cho on code m Xcode cho rng cn ci thin bn kp thi kim tra li v chnh sa cho hiu qu ( nu cn ). Xcode cn h tr bn mt ch gi sa li trong qu trnh vit code. V d bn vit code nhng qun du ; , Xcode s gi cho bn c du ; hon tt on code hon chnh.

31

Hnh 2.26 Gi khc phc li Xcode ch h tr khc phc mt s li c bn v c php, cc li lin quan khc trong qu trnh vit code cc bn phi t gii quyt Trong Library pane, Xcode h tr sn cho bn mt s on code mu trong th vin, nu bn cn xi on code no, bn ch cn ko th on code t Library pane sang Editor area.

Hnh 2.27 Mt s code mu s dng


32

Nu bn c mt on code, bn mun lu n li ln sau s dng th bn ch cn chn on code v ko th vo Library pane, t tn cho on code v lu li. Nh vy ln sau bn mun s dng li, ch vic ko th t Library sang l c. thun tin cho vic vit code nhanh chng, bn c th bt ch chia i vng Editor area lm hai, lc ny bn c th xem cng lc c tp tin .h ln tp tin .m. Mun thc hin iu , trong Toolbar, bn nhp chut vo nt Assistant Editor Button ( ).

Hnh 2.28 Chia i mn hnh Editor tin lm vic Bn c th ty chnh li font v mu ch to nn mt s thay i, to thm cm hng mi. Bn chn Xcode > chn Preferences > chn Fonts & Colors, sau bn ty chn mt nh dng mnh thch.

33

Hnh 2.29 Ty chnh Font & Color cho giao din lp trnh code ca Xcode Trong qu trnh vit chng trnh, bn cng c th s dng nt Quick Help trong Utility area m ti liu tham kho v tra cu cc hm cng nh xem v d minh ha cho cc hm. 2.1.6 Thc Thi V Kim Tra Li Ca ng Dng 2.1.6.1 Thc Thi ng Dng Khi bn mun chy th v a ng dng ln iOS Simulator, bn s dng cc button chuyn dng trn Toolbar. chy ng dng, trc tin bn phi chn la thit b m bn mun chy ng dng ln . Bn c th chn chy ln thit b tht hoc trn iOS Simulator. Trong iOS Simulator, ty theo ng dng ca bn vit cho thit b no m la chn thit b , v d iPad, iPhone, iPhone Rentina

34

Hnh 2.30 La chn thit b iOS Simulator Sau khi chn la xong phn thit b, bn nhn Run chy chng trnh. Nu mun dng chng trnh, bn nhn Stop.

Hnh 2.31 Nhn Stop dng chng trnh


35

2.1.6.2 Kim Tra Li Ca ng Dng Vng Debug area h tr bn debug ng dng kim tra tng bc, ngoi ra cn c vng Debug Navigator cho php bn theo di cc tin trnh, cng nh vic s dng RAM, CPU.

Hnh 2.32 Vng Debug Navigator Trong Debug area c cc nt h tr nh bt tt cc Breakpoint, nhm nt h tr thc thi ng dng tng bc h tr bn debug mt cch chnh xc hn.

Hnh 2.33 Vng Debug area nh du breakpoint, bn chn v tr cn nh du, v nhp chut vo Breakpoint gutter tng ng vi v tr .

36

Hnh 2.34 nh du Breakpoint Ngoi ra nu bn mun thu gn 1 on code no , bn c th s dng thanh ng h tr bn cnh thanh ng t Breakpoint.

Hnh 2.35 Thu gn on code cho d nhn

37

2.2 TM HIU IOS SIMULATOR 2.2.1 Gii Thiu iOS Simulator iOS Simulator l mt phn trong b cng c km theo ca phn mm Xcode. iOS Simulator cha iOS SDK cho php bn chy trn Mac OS gi lp mi trng iPhone, iPad nhm phc v cho vic kim th ng dng c vit ra trc khi kim th ng dng trn thit b tht. iOS Simualtor cho php bn ci t nhiu thit b iOS khc nhau nh iPhone, iPhone Rentina, iPad, iPad Rentina.. vi nhiu phin bn iOS khc nhau nh 6.0, 6.1, 7.0. Do bn c th d dng xy dng ng dng ca mnh dnh cho phin bn iOS mi hoc dng cho c phin bn iOS c. Vi iOS Simulator, bn c th kim th ng dng ca bn v thit k giao din, v tnh nng ca ng dng, t c th khc phc cc li pht sinh, ti u ha ng dng trc khi bn em ng dng ln thit b tht. Bn c th c thm ti liu iOS Simulator User Guide trn iOS Developer Library tm hiu thm, cng nh c thm kinh nghim s dng iOS Simulator. Xem ti : https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_ Guide/Introduction/Introduction.html 2.2.2 Tm Hiu iOS Simulator ng dng iOS Simulator c th chy chung vi phn mm Xcode hoc chy c lp u c. Bn c th tng tc vi iOS Simulator thng qua bn phm, chut nhp d liu cng nh iu khin cc s kin ca ngi dng. Phn ny s gip bn tm hiu mt s im c bn ca iOS Simulator h tr bn tt hn trong qu trnh vit ng dng cho iOS.

38

2.2.2.1 Thao Tc C Bn Vi IOS Simulator Thao tc m v thot ios simulator m iOS Simulator bn c hai cch. Mt l bn chy ng dng trong Xcode khi ng iOS Simulator. Vi cch ny bn ch cn chn iOS Simulator ph hp ri chn Run.

Hnh 2.36 Chn Run m iOS Simulator Cch th hai l bn chn menu Xcode > chn Open Develop Tool > iOS Simulator. Khi y iOS Simulator s c khi ng.

39

Hnh 2.37 M iOS Simulator trong Menu Mc d l mt phn trong b cng c ca Xcode, nhng iOS Simulator vn c th tip tc hot ng d Xcode c b ng chng trnh. Do nu bn mun thot hn iOS Simulator, bn chn menu iOS Simulator > chn Quit iOS Simulator.

Hnh 2.38 Trong menu chn Quit iOS Simulator


40

Xoay mn hnh iOS Simulator Trong qu trnh chy ng dng trn iOS Simulator kim th, i lc bn cn s dng ti chc nng xoay mn hnh c th kim tra tnh tng thch ca ng dng vi tng kiu mn hnh ( ngang, ng) hoc ph hp vi ng dng ca bn ( chng hn vit ng dng s dng mn hnh ngang). Nu l thit b tht, tht d dng bn c th xoay mn hnh cho ph hp. Tuy nhin vi iOS Simulator, bn cn phi s dng n chc nng xoay mn hnh c h tr sn c th xoay mn hnh theo mun. Bn c th vo menu Hardware > chn Rotate Left nu bn mun xoay qua tri ; chn Rotate Right nu bn mun xoay qua phi ; chn Shake Gesture nu bn mun rung nh.

Hnh 2.39 Trong menu chn xoay mn hnh iOS Simulator n/hin keyboard Trong qu trnh kim th ng dng, nhiu trng hp bn cn s dng n bn phm ca iOS, hoc sau khi nhp liu xong trong TextField nhng ng dng ca bn cha c chc nng n bn phm i, lc bn cn s dng n tnh nng Keyboard ca iOS Simulator n/hin bn phm. Bn c th vo menu Hardware > chn Simulate Hardware Keyboard.
41

Hnh 2.40 n/Hin keyboard trong iOS Simulator Ci t v g b ng dng trn iOS Simulator ng dng trong iOS Simulator c ci t thng qua Xcode. Khi bn chy ng dng bng Xcode th Xcode s ci t ng dng vo iOS Simulator. Cch thc g b ng dng cng ging nh trn thit b iOS tht. Bn ch cn nhp v gi chut ( hoc trackpad ) trn biu tng ca ng dng cho n khi xut hin biu tng du x, bn ch cn nhp vo du x g b ng dng. Sau khi hon tt ch cn n Home tr li ban u.

42

Hnh 2.41 G ng dng trong iOS Simulator B sung thm cc phin bn ios v cc thit b ios iOS Simulator cho php bn c th chy ng dng trn nhiu loi thit b nh iPhone, iPhone Rentina, iPad, iPad Rentina. ng thi, iOS Simulator cng cho php bn s dng nhiu phin bn khc nhau ca iOS nh iOS 6.0, iOS 6.1, iOS 7.0. Mc nh sau khi ci Xcode 5, iOS Simulator km theo c ci t h tr cc thit b iPhone Rentina, iPad Rentina v iOS 7.0. Nu bn mun iOS Simulator chy cc thit b iPhone, iPad thng thng v cc phin bn iOS thp hn nh iOS 6.0, iOS 6.1 th bn cn phi ti v ci t thm. Bn vo Xcode > chn Preferences > chn mc Download. Ti y bn la chn phin bn iOS cn ci t thm v ti v.

43

Hnh 2.42 Ti thm cc iOS Simulator phin bn c hoc ti liu Chp nh mn hnh iOS Simulator Nu bn mun chp nh mn hnh ca iOS Simulator, bn c th lu li nh chp mn hnh ca iOS Simulator ln mn hnh ca Mac OS. lm vic , bn chn File > chn Save Screen Shot, khi nh chp mn hnh s c lu trn mn hnh Mac OS.

Hnh 2.43 Chp nh mn hnh iOS Simulator


44

Copy - Paste trong iOS Simulator Trong iOS Simulator cng h tr bn Copy v Paste mt chui. Copy mt chui, bn nhp chut vo chui hin th ra nt Select v Select All .Chn Select nu bn mun la chn mt t no , hoc Select All nu mun chn tt c.

Hnh 2.44 Chn Select hoc Select All Di chuyn im u v im cui nh du li chui cn chn > chn Copy

45

Hnh 2.45 La chn chui cn copy v chn Copy Paste mt chui vo iOS Simulator, trc tin bn chn Edit > Paste chuyn chui c copy t Mac vo iOS Simulator.

Hnh 2.46 Paste t Mac OS vo iOS Simulator


46

Sau chn v tr mun Paste chui trong iOS Simulator > Double-click vo v tr hin ra nt Paste > chn Paste.

Hnh 2.47 Chn Paste 2.2.2.2 Mt S Hn Ch Ca iOS Simulator Mc d iOS Simulator rt hu ch cho bn kim th ng dng trc khi a ln thit b tht, tuy nhin bn thn iOS Simulator vn cn mt s hn ch nht nh. i vi phn cng, iOS Simulator vn cn khim khuyt mt s im nh khng c camera, khng c microphone Ngoi ra cn mt s framework khng c h tr nh Media player, Messenger UI Nu nh cc phin bn trc ca Xcode, iOS Simulator cn h tr c vi cc phin bn ca iOS thp hn nh iOS th trong phin bn ny, iOS Simulator ch h tr t phin bn iOS 6.0 tr ln.

47

CHNG III NGN NG OBJECTIVE-C

Mc d Xcode h tr nhiu ngn ng trong vic lp trnh ng dng trong iPhone, nhng ng vai tr ch yu nht vn l ngn ng Objective-C bi s thn thin, d s dng ca n. Chng ny s hng dn bn mt s nt c bn ca ngn ng lp trnh Objective-C vi hi vng bn s nm c s lc cch s dng, c php ca ngn ng ny thun tin hn trong vic xy dng ng dng. Ni dung chng s trnh by s lc mt s vn sau ca ngn ng Objective-C: Khai bo bin Kiu d liu Cc php ton Hm (Function) Cu trc iu kin Cu trc lp Mng Chui

3.1 GII THIU NGN NG OBJECTIVED-C Ngn ng Objective-C c to ra bi Brad Cox v Tom Love vo nm 1980 ti cng ty Stepstone. T nm 1988, cng ty NeXT Sofware nm gi bn quyn ca ngn ng Objective-C. H pht trin cc b th vin v c mi trng pht trin cho n c tn l NEXTSTEP. n cui thng 12 nm 1996, hng Apple mua li cng ty NeXT Software, mi trng NEXTSTEP/OPENSTEP tr thnh phn ct li ca h iu hnh OS X m Apple gii thiu sau ny. Phin bn chnh thc ca mi trng pht trin ny do Apple gii thiu ban u c tn l Cocoa. Bng vic h tr sn ngn ng Objective-C, ng thi tch hp mt s cng c pht trin khc nh Project Builder (y l tin thn ca Xcode) v Interface Builder, Apple to ra mt mi trng mnh m pht trin ng dng trn Mac OS X. n nm 2007, Apple tung ra bn nng cp cho ngn ng Objective-C v gi l Objective-C 2.0. Ngn ng lp trnh Objective-C da trn nn tng ngn ng C nhng b sung thm h tr lp trnh hng i tng. Objective-C l ngn ng lp trnh s dng vit ng dng cho Apples iOS v h iu hnh Mac OS. 3.2 KHAI BO BIN - CCH S DNG 3.2.1 Bin Bin c s dng lu tr cc gi tr ca ng dng. Bin gm c: kiu d liu, tn bin v gi tr ca bin. C php: Kiu_d_liu tn_bin ; hoc Kiu_d_liu tn_bin = gi_tr_ca_bin; Trong =: lnh gn gi tr cho bin VD: int x ; hoc int x = 10;
49

3.2.2 Quy Tc t Tn Quy tc t tn bin: - Ngn ng Objective-C c phn bit hoa thng. - Tn bin khng c du ting vit. - Tn bin khng c khong trng. - Tn bin khng c bt u bng s. - Tn bin khng c c cc k t c bit (ngoi tr du gch di _) - Tn bin khng c t trng vi cc t kho ca ngn ng objective-C. VD: void, if, static, ... 3.3 KIU D LIU Kiu d liu s gip trnh bin dch xc nh c loi d liu (s nguyn, s thc, chui,) m chng ta mun lu tr l g t s cp pht lng b nh tng ng vi loi d liu m chng ta cn lu tr. Objective-C h tr cc kiu d liu c bn nh sau: Loi d liu K t Tn kiu char unsigned char S nguyn int unsigned int short unsigned short long unsigned long long long S nh 1 byte 1 byte 4 bytes 4 bytes 2 bytes 2 bytes 4 bytes 4 bytes 8 bytes Min gi tr -128 .. 127 0 .. 255 - 2147483648 .. 2147483647 0 .. 4294967295 -32768 .. 32767 0 .. 65535 -2147483648 .. 2147483647 0 .. 4294967295 -9,223,372,036,854,775,808 ..

50

9,223,372,036,854,775,807 unsigned long long S thc float double 8 bytes 4 bytes 8 bytes 0 .. 18,446,744,073,709,551,615 0 .. 3.4028235e+38 0 .. 1.7976931E+308

Long double Logic BOOL

16 bytes 1 bytes

0 .. 1.1897315E+509 0, 1; True, False; Yes, No

Bng 3.1 Kiu d liu trong Objectived-C 3.4 PHP TON Php ton Cng Tr Nhn Chia Ly phn d K hiu + * / % V d A+B AB A*B A/B M%N

Bng 3.2 Cc php ton trong Objectived-C Lu : php ly phn d ch c dng trn 2 ton hng kiu s nguyn (nu khng s sinh li c php) V d: 9 % 5 = 4 3.5 CH THCH CODE Ch thch mt dng code

51

//ghi ch ch trn 1 dng Ch thch mt on code /* Ghi ch trn 1 hay nhiu dng */ 3.6 XUT D LIU RA MN HNH Hm NSLog l hm c bit ca h thng, hm ny c thit k dng cho vic hin th cc thng bo li. C php: NSLog(Ni dung in [ , cc_biu_thc]); Ni dung in Cc k t cn in Cc k t c bit bt u bi du \ V d LacHong University \n \t \\ \; \ Cc m nh dng gi tr ca biu thc : xung dng; : k t Tab; : k t \ : k t ; : du

%m_kiu_d_liu (kiu float l f; kiu int l d hay i)

Bng 3.3 V d cc kiu xut d liu ra mn hnh VD: Dng hm NSLog hin th chui LacHong University

52

Hnh 3.1 Code s dng hm NSLog() Kt qu hin th:

Hnh 3.2 Kt qu in ra mn hnh Ghi ch: @: bn trong cp nhy i l chui cn lu log kim tra.

Hnh 3.3 Dng NSLog() xut ra mn hnh mt s. Kt qu hin th:

Hnh 3.4 Kt qu xut ra ch v s

53

3.7 FUNCTION 3.7.1 nh Ngha Function L tp hp cc dng code, gom thnh 1 khi. Khi code ny c t tn.+ Khi code ny ch c thc thi khi tn khi code c gi. 3.7.2 Phng Thc Khng C Tham S Truyn Vo Khai bo: - (kiu_hm) tn_hm { //cc cu lnh [return [biu_thc];] } Trong : - Du - i din cho loi phng thc m ta phi gi n thng qua i tng ca lp cha ng phng thc . - Kiu hm: l kiu ca <biu thc> trong lnh return. - Tn hm: do chng ta t ngh ra VD:

Hnh 3.5 Hm HelloWorld Gi hm:

54

Hnh 3.6 Xut ra mn hnh HelloWorld Trong self l lp hin ti c cha phng thc helloWorld. 3.7.3 Phng Thc C 1 Tham S Truyn Vo Khai bo: - (kiu_hm) tn_hm : (kiu_d_liu)tn_tham_s { //cc cu lnh [return [biu_thc];] } VD:

Hnh 3.7 Hm HelloWorld vi tham s truyn vo Gi hm:

Hnh 3.8 Gi hm HelloWorld 3.7.4 Phng Thc C Nhiu Tham S Truyn Vo Khai bo:

55

- (kiu_hm) tn_hm : (kiu_d_liu)tham_s_1 [m_t]: (kiu_d_liu)tham_s_2 { //cc cu lnh [return [biu_thc];] } Trong - du hai chm : c dng ngn cch gia cc tham_s. - [m_t]: c th c hoc khng, dng m t cho tn tham s. VD:

Hnh 3.9 Hm cng hai s Trong - a: l tham s th 1. - b: l tham s th 2. Gi hm:

Hnh 3.10 In kt qu hm cng Trong 1 v 2 l cc i s c truyn vo hm congHaiSo.

56

3.8 CU TRC IU KIN 3.8.1 Cu Lnh If C php if ( iu_kin ) { //Cng vic 1 } Lu : iu kin l mt cu hi m cu tr li l YES hoc NO, Cng vic 1 s c thc hin nu iu kin l YES. V d: - if (a > b) a c ln hn b khng? - if (a >= b) a c ln hn hoc bng b khng? - if (a < b) a c nh hn b khng? - if (a <= b) a c nh hn hoc bng b khng? - if (a == b) a c bng b khng? - if (a != b) a c khc b khng? 3.8.2 Cu Lnh If Else C php if ( iu_kin ) { //Cng vic 1 } else {
57

//Cng vic 2 } 3.8.3 Cu Lnh Switch - Case C php switch ( biu_thc) { case hng_1: [cng_vic_1] case hng_2: [cng_vic_2] ... case hng_n: [cng_vic_n] default: [cng_vic_n+1] } Trong - Biu thc v hng kiu s nguyn - Lnh break thot khi switch VD:

58

Hnh 3.11 Cu trc Switch 3.9 Cu Trc Lp 3.9.1 Vng Lp For C php for (biu_thc1; biu_thc2; biu_thc3) { //Cng vic } VD:

Hnh 3.12 Vng lp For 3.9.2 Vng Lp While C php:


59

while (iu_kin_lp) { //Cng vic } Trong : - Khi <iu_kin_lp> cn ng th cn thc hin <cng_vic>. Vng lp kt thc khi <iu_kin_lp> sai. VD:

Hnh 3.13 Vng lp While 3.9.3 Vng Lp Do-While C php: do { //Cng vic lp } while(iu_kin_lp) Trong : - Thc hin cng vic t nht 1 ln, v lp li cng vic khi <iu_kin_lp> l ng. VD:

60

Hnh 3.14 Vng lp Do - While 3.10 MNG 3.10.1 nh Ngha Mng l 1 tp hp nhiu bin nh c cng kiu, gi l kiu phn t ca mng, c cp pht nhng v tr lin tc trong b nh. Mi phn t (bin nh) trong mng c xc nh da trn tn mng v cc ch s xc nh v tr ca phn t trong mng. Ch s phn t ca mng l cc s nguyn khng m. 3.10.2 Mng Nsarray S dng i tng NSArray khi to mng. C php: NSArray *tn_mng; VD: NSArray *mangTen; khi to gi tr cho cc phn t trong mng ta s dng hm <initWithObjects> VD:

61

Hnh 3.15 S dng NSArray Trong - hm <count>: m s phn t trong mng. - alloc: cp pht vng nh cho mng mangTen. - %@: M kiu d liu i vi kiu chui NSString trong Objective-C. - objectAtIndex: ly ra phn t v tr index. Kt qu

Hnh 3.16 Kt qu s dng NSArray 3.11 CHUI I TNG NSSTRING 3.11.1 Khi To Chui i vi chui trong Objective-C phi bt u bng @

Hnh 3.17 Khi to chui kim tra gi tr ca chui ta dung hm NSLog

62

Hnh 3.18 Kim tra gi tr chui m s lng k t (chiu di ca chui)

Hnh 3.19 m s lng k t 3.11.2 i Tng NSString To i tng c kiu l NSString c th s dng cc thao tc lien quan n chui do Class NSString cung cp (ghp chui, ct chui)

Hnh 3.20 i tng NSString 3.11.3 Tm Kim Bn Trong Chui Dng hm rangeOfString tm chui str1 c xut hin trong chui str2 khng.

Hnh 3.21 Tm kim bn trong chui


63

Kt qu

Hnh 3.22 Kt qu tm kim 3.11.4 Tm Chui V Thay N Thnh Chui Khc Dng hm replaceCharactersInRange thay i chui thnh chui khc.

Hnh 3.23 Thay i k t trong chui Kt qu:

Hnh 3.24 Kt qu thay i k t 3.11.5 Xo Ni Dung Bn Trong Chui Dng hm deleteCharactersInRange xa mt ni dung bn trong chui.

Hnh 3.25 Xa ni dung trong mt chui Kt qu

64

Hnh 3.26 Kt qu sau khi xa ni dung 3.11.6 Ct Chui Ct chui c gii hn s lng k t, ly t k t th n.

Hnh 3.27 Ct chui t v tr n Kt qu

Hnh 3.28 Kt qu ct chui t v tr n Ly tt c k t cn li, tnh t k t th n.

Hnh 3.29 Ly cc k t cn li t v tr n Kt qu

Hnh 3.30 Kt qu ly cc k t cn li t v tr n
65

Tch chui thnh cc phn nh

Hnh 3.31 Tch chui thnh cc phn nh Kt qu

Hnh 3.32 Kt qu tch chui 3.11.7 Chn K T Vo Trong Chui Dng hm insertString chn k t hoc mt chui vo chui.

Hnh 3.33 Chn k t vo chui Kt qu

Hnh 3.34 Kt qu chn k t vo chui 3.11.8 Chn K T Vo Cui Chui Dng hm appendString chn k t vo cui chui.
66

Hnh 3.35 Chn k t vo cui chui Kt qu

Hnh 3.36 Kt qu chn k t vo cui chui 3.11.8 So Snh Chui Dng hm isEqualToString so snh hai chui.

Hnh 3.37 So snh hai chui Kt qu

Hnh 3.38 Kt qu so snh hai chui 3.11.9 So Snh Chui Vi K T u V Cui Chui Dng hm hasPrefix v hasSuffix so snh vi k t u chui, k t cui chui.

67

Hnh 3.39 So snh vi k t u, k t cui Kt qu

Hnh 3.40 Kt qu so snh vi k t u chui, k t cui chui 3.11.10 Chuyn i Hnh Dng Ca Ch Vit hoa ch u.

Hnh 3.41 Vit hoa k t u Kt qu

68

Hnh 3.42 Kt qu vit hoa k t u Tt c vit thng.

Hnh 3.43 Vit thng tt c k t Kt qu

Hnh 3.44 Kt qu vit thng cc k t Tt c vit hoa.

Hnh 3.45 Vit hoa tt c k t Kt qu

Hnh 3.46 Kt qu vit hoa cc k t

69

3.11.11 Chuyn Chui Thnh Dng S Chuyn thnh s nguyn

Hnh 3.47 Chuyn thnh s nguyn Kt qu

Hnh 3.48 Kt qu chuyn thnh s nguyn Chuyn thnh NSInteger

Hnh 3.49 Chuyn thnh NSInteger Kt qu

Hnh 3.50 Kt qu chuyn thnh NSInteger Chuyn thnh float

70

Hnh 3.51 Chuyn thnh float Kt qu

Hnh 3.52 Kt qu chuyn thnh float Chuyn thnh s double

Hnh 3.53 Chuyn thnh double Kt qu

Hnh 3.54 Kt qu chuyn thnh double

71

CHNG IV MT S THAO TC C BN Trc khi bt u lp trnh ng dng trn iPhone, ngoi vic bn tm hiu v Xcode v iOS Simulator, bn cn phi tm hiu thm mt s thao tc c bn trong lp trnh iOS. Hiu bit v cc thao tc c bn ny s b tr cho bn trong qu trnh tm hiu, cng nh l bi hc v lng trc khi i su vo tm hiu cc i tng c bn trong Xcode chng sau. Ni dung chng ny gm mt s thao tc c bn nh: Thay i icon ca ng dng Thay i mn hnh khi ng dng va c m ln Thay i tn ng dng khi tn c qu di Ty chnh background Thm mi mt framework n thanh trng thi status bar

4.1 APP ICON LOADING SCREEN Phn ny s hng dn bn cch hin th cng nh to icon, background image, loading screen cho ng dng ca bn. App icon, background image, loading screen cho ng dng ca bn cn da theo kch thc quy nh ca Apple v nn nh dng PNG. Bn c th tham kho thm kch thc chun y
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconM atrix.html#//apple_ref/doc/uid/TP40006556-CH27-SW1.

4.1.1 App Icon App icon l biu tng ca ng dng s hin th ra mn hnh iPhone sau khi ng dng c ci t, ng thi icon ca ng dng cng hin th ln App Store khi bn em ng dng ca mnh ln App Store. C hai loi icon l icon dnh cho ng dng trn iPhone v icon dnh cho ng dng trn App Store. App icon cho iPhone Rentina l 120x120, App icon cho App Store l 1024x1024.

Hnh 4.1 Icon Sau khi chun b c hnh nh vi kch thc ph hp, trong phn thng tin ca Project, bn ko xung phn App icon v ko cc icon chun b sn vo ng v tr ca icon.

73

Hnh 4.2 Ko th icon vo v tr Bn tin hnh chy th ng dng trn iOS Simulator s thy icon ca ng dng.

Hnh 4.3 Icon trn iOS simulator

74

4.1.2 Loading Screen Loading Screen l hnh nh m khi chy ng dng ln bn s thy n, ty theo tc ca ng dng m thi gian hin th Loading Screen nhanh hoc chm khc nhau. chun b cho Loading Screen bn cn chun b trc hnh nh dng PNG, kch thc 640x1136 (iPhone 5 tr ln), 640x960 (iPhone 4).

Hnh 4.4 Chun b Background Sau khi chun b xong hnh nh, trong phn Lauch Image, bn ko th hnh nh vo Xcode cho ng v tr.

Hnh 4.5 Ko th background image vo Lauch Image


75

4.2 THAY I APP NAME App Name l tn ca ng dng hin th bn di App icon trn mn hnh iPhone. Nhiu trng hp v tn ng dng qu di nn khng th hin th ht trn mn hnh iPhone, do bn cn phi i tn ng dng li cho ph hp, ngn gn c th hin c tn ng dng bn di icon, nh vy ng dng s c tnh thm m hn. khc phc trng hp ny, bn cn phi thay i li App Name. Bn truy cp tp tin .plist v sa i Bundle Display Name thnh tn mi ca ng dng.

Hnh 4.6 Truy cp tp tin .plist

76

Hnh 4.7 Sa i Bundle display name Sau khi hon tt, bn chy ng dng trn iOS Simulator xem kt qu.

Hnh 4.8 Thay i tn trn iOS Simulator

77

4.3 N STATUS BAR Vic n status bar cho php bn chy ng dng ca mnh ton mn hnh m khng phi thu nh mt phn giao din dnh ch cho status bar. Trc tin bn chn tp tin .plist trong project, sau bn thm mt dng mi.

Hnh 4.9 Thm dng mi Trong danh sch la chn ca dng mi thm vo, bn la chn Status bar is initially hidden v tr v gi tr l yes.

Hnh 4.10 Chn gi tr Yes


78

Chy ng dng trn iOS Simulator xem kt qu.

Hnh 4.11 Thanh trng thi Status bar mt 4.4 BACKGROUND 4.4.1 Background Image Hng dn ny s hng dn bn to v s dng mt hnh nh lm hnh nn cho ng dng ca bn. Trc tin bn cn phi chun b mt tm nh lm hnh nn. Kch thc ca tm nh ny ging nh hnh nh trong Loading Screen: nh dng PNG, kch thc 640x1136 (iPhone 5 tr ln), 640x960 (iPhone 4).

79

Hnh 4.12 Background Image Sau khi chun b xong hnh nh lm background cho ng dng, bn chp hnh nh vo trong project.

Hnh 4.13 Chp hnh nh vo Project

80

Tip theo bn t Utility area, bn ko th i tng UIImage View vo Interface Builder, iu chnh kch thc UIImage View cho va vi mn hnh.

Hnh 4.14 Ko th UIImage View vo Project Trong Inspector selector pane > Attributes inspector, bn tm n mc Image View > chn Image > la chn hnh nh bn mun lm background.

81

Hnh 4.15 La chn hnh nh lm background Kt qu.

Hnh 4.16 Thay i background bng image

82

4.4.2 Background Color Ngoi vic s dng hnh nh lm background cho ng dng, nu bn yu thch s n gin, bn c th to background bng cch dng mt mu m bn a thch. Trong Inspector selector pane, bn chn Attributes inspector, tm n phn Background.

Hnh 4.17 Attributes inspector Ti y bn cho hin ra bng mu chn la vi nhiu mu khc nhau, hy la chn cho mnh mt mu ph hp, nu mun nhiu mu hn c th chn Other.

Hnh 4.18 Chn mu

83

Sau khi chn xong mu th background s i mu vi mu bn la chn.

Hnh 4.19 Background thay i 4.5 THM FRAMEWORK Mc d Xcode h tr nhiu Framework h tr cho cc nh pht trin ng dng, tuy nhin ch mt s framework c bn c thm vo khi to project, cc framework cn li th khi vit ng dng, bn phi t thm vo c th s dng framework . tin hnh thm mt framework, trong giao din General ca Project, bn ko xung ti mc Link Frameworks and Libraries.

Hnh 4.20 Link Frameworks and Libraries


84

Bn nhp chut vo biu tng du cng m ra bng danh mc cc framework m Xcode h tr.

Hnh 4.21 Chn Framework Sau bn la chn framework m bn mun thm vo project ri nhn Add.

Hnh 4.22 chn Add


85

CHNG V MT S I TNG C BN Chng ny trnh by mt s i tng c bn thng c s dng vit ng dng cho iOS. Qua chng ny, bn c th nm c chc nng cng nh cch s dng mt s i tng c bn, t c th vn dng vo vit ng dng. Do kh nng ca ngi vit cn gii hn nn s i tng c gii thiu trong chng ny vn cn hn ch. Bn c th tm hiu thm nhiu i tng khc, tm hiu su hn tng i tng bng cch truy cp vo hng dn ca Apple cho ngi lp trnh a ch sau: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKit UICatalog/index.html

5.1 I TNG LABEL BUTTON TEXT FIELD 5.1.1 Gii Thiu 5.1.1.1 i Tng Label Label dng hin th mt ni dung l ch/cu/on vn c tnh c nh t thay i.

Hnh 5.1 Label Label cho php ngi dng thay i mt s thuc tnh hin th ni dung ra giao din cho ph hp nh ty chnh mu ch, font v kch thc, canh tri/gia/phi hay cho ni dung ca label xung dng.

Hnh 5.2 Thuc tnh ca Label


87

5.1.1.2 i Tng Button Button c th c thit k hin th ch hoc hin th theo hnh nh, thng c s dng ngi dng tng tc vi ng dng nhm to ra mt s kin no ca ng dng. Chng hn bn nhp tn ca bn vo text field, bn mun khi ngi dng chm vo button s hin tn bn ra mn hnh.Lc ny button s c thit k nm bt s kin khi ngi dng chm vo, v thc hin chc nng hin th tn bn ra mn hnh.

Hnh 5.3 Button Vi button, bn c th la chn mt s nh dng button c sn, hoc ty chn mt dng button khc theo bn. Khng nhng th bn cn c th ty chnh font ch, mu ch, mu nn ca button hoc thay th button theo m hnh nh button c thit k trc.

88

Hnh 5.4 Thuc tnh ca Button 5.1.1.3 i Tng Text Field i tng Text field thng c s dng ngi dng nhp d liu u vo cho ng dng. Chng hn nh bn vit chng trnh tnh tng hai s, th bn s dng Text field ngi dng nhp vo hai s cn tnh tng, v bn s s dng gi tr nhp vo ca Text field tnh ton v hin th kt qu cho ngi dng.

Hnh 5.5 Text Field Text field cho php ty chnh canh l tri/gia/phi, ty chnh font ch v kch thc ch trong Text field. Hn na, bn c th ty chnh hnh dng ca Text field, cng nh nh dng ni dung gi cho ngi dng (placeholder).
89

Hnh 5.6 Thuc tnh ca Text Field 5.1.2 V D Trong phn v d ny s hng dn cc bn vit mt ng dng nh hin th tn ca bn ra mn hnh. ng dng s c mt label, mt button, mt text field. Bn s nhp tn bn vo text field, sau chm vo button, label s hin th ni dung m bn nhp vo text field trc . - To ng dng c tn l Label-Button-TextField. - Thit k giao din cho ng dng gm mt lable, mt button, mt text field. - nh x cc i tng vo tp tin .h. - Vit code cho s kin khi ngi dng chm vo button. Bc 1: To project mi.

90

Hnh 5.7 To New Project

Hnh 5.8 Chn ni lu project


91

Bc 2: thit k giao din

Hnh 5.9 thit k giao din Bc 3: nh x i tng.

Hnh 5.10 nh x i tng


92

Hnh 5.11 nh x i tng (tt) Bc 4: vit code cho button.

Hnh 5.12 vit code cho button Bc 5: chy th

93

Hnh 5.13 chy th ng dng 5.2 KT NI C S D LIU VI SQLITE 5.2.1 Gii Thiu SQLite l mt h qun tr c s d liu c th chy hon ton c lp m khng cn n server. SQLite thng c ngi lp trnh s dng lu tr c s d liu khi vit ng dng cho cc thit b ca Apple. Cc lnh truy vn trn SQLite s dng cc lnh truy vn ca SQL (v d SELECT, UPDATE, CREATE). Vic qun l SQLite rt n gin, bn ch cn qun l thng qua mt plugin ca FireFox l SQLite Manager.Bn c th tm hiu thm ti http://www.sqlite.org. 5.2.2 Ci t Sqlite Manager Cho Firefox ci t plugin qun l SQLite cho Firefox, bn vo phn Addon ca trnh duyt Firefox v tm plugin SQLite Manager ri Add to Firefox.

94

Hnh 5.14 Addon SQLite Sau khi ci t xong, trong phn Tool bn s thy nh hnh.

Hnh 5.15 SQLite Manager trong Tool 5.2.3 Cu Hnh ng Dng Tng Tc Vi Sqlite ng dng c th thao tc vi c s d liu ca SQLite, bn cn b sung thm th vin h tr vo project. Trong phn Build Phase, mc Link to Library, bn thm vo th vin libsqlite3.dylib vo project.

Hnh 5.16 Thm framework h tr SQLite


95

5.2.4 Cc Hm Trong Sqlite Trong SQLite c mt s hm c bn cho php bn tng tc d dng vi c s d liu. - sqlite3_open(): m mt kt ni n tp tin sqlite. Nu tp tin ny cha c, h thng s t ng to ra. - sqlite3_close(): ng kt ni n sqlite. - sqlite3_prepare_v2(): khi to cu lnh truy vn SQL thc thi. - sqlite3_step(): thc thi lnh truy vn c to bi hm sqlite3_prepare_v2(). - sqlite3_column_<type>(): tr v kt qu d liu t cu truy vn SQL, vi kiu d liu c khai bo trong <type> (thng l text, bytes, int, int16). - sqlite3_finallize(): xo cu lnh truy vn SQL c khi to bi hm sqlite3_prepare_v2() trong b nh. Bn c th tham kho thm mt s hm khc ti: www.sqlite.org/c3ref/funclist.html 5.2.4.1 Khi To i Tng Sqlite Trc khi tng tc vi c s d liu SQLite, bn cn phi to i tng dng ny bng cch khai bo mt bin c kiu sqlite3 trong tp tin .h.

Hnh 5.17 Khai bo sqlite3 5.2.4.2 Kt Ni Hoc To Database Dng hm sqlite3_open() m kt ni n c s d liu sqlite.

Hnh 5.18 Hm sqlite3_open Nu tp tin ny cha c th s t ng c to.


96

Filename: l ng dn n tp tin sqlite. Nu tn database c du ting vit th cn chun ho li theo dng UTF-8 trc khi truyn vo. S dng bin SQLITE_OK kim tra trng thi tr v ca vic m kt ni n database c thnh cng hay khng. 5.2.4.3 Khi To V Thc Thi Lnh Truy Vn Cu lnh truy vn c khi to v lu tr vo i tng sqlite_stmt() v truyn vo hm sqlite_prepare_v2() thc thi.

Hnh 5.19 khai bo i tng sqlite_stmt

Hnh 5.20 Thc thi i tng sqlite_stmt trong sqlite3_prepare_v2 Cu lnh SQL c thc hin bi cc lnh sau:

Hnh 5.21Thc hin cu lnh SQL ly kt qu tr v


97

Trong cu lnh sqlite3_step() s tr v cc dng nh sau: - Nu cu lnh sql dng INSERT, DELETE, UPDATE, CREATE th tr v kt qu c dng l SQLITE_OK bo tnh trng c thc thi c hay khng. - Nu cu lnh slq dng SELECT s tr v kt qu c dng l SQLITE_ROW, l tp hp cc hng d liu c ly t database. 5.2.4.4 Truy Xut D Liu Database Khi to cu lnh truy vn.

Hnh 5.22 Khi to cu lnh truy vn Bc tch d liu ly c.

Hnh 5.23 Tch d liu ly c 5.2.4.5 ng Kt Ni Database Sau khi hon tt qu trnh tng tc c s d liu, bn nn ng li kt ni c s d liu c

Hnh 5.24 ng kt ni c s d liu


98

5.2.5 V D Bc 1: khi ng firefox, vo SQLite Manager

Hnh 5.25 Truy cp SQLite Manager Bc 2: to mt c s d liu mi tn l Count.

Hnh 5.26 To CSDL mi Bc 3: To mt table mi

99

Hnh 5.27 To table

Hnh 5.28 Khai bo thuc tnh cho Table Bc 4: nhp d liu

100

Hnh 5.29 Nhp d liu

Hnh 5.30 Kt qu Bc 5: to project mi sqlite

101

Hnh 5.31 To Project mi

Hnh 5.32 in thng tin Project Bc 6: thit k giao din


102

Hnh 5.33 Thit k giao din Bc 7: thm th vin vo project.

Hnh 5.34 Thm th vin


103

Hnh 5.35 Sau khi thm th vin Bc 8: nh x i tng

Hnh 5.36 nh x i tng Bc 9: Thm tp tin sqlite vo project

104

Hnh 5.37 Thm file mi

Hnh 5.38 Add Bc 10: thm th vin sqlite3.h vo project, khai bo i tng sqlite3 v nsstring
105

Hnh 5.39 Kt qu nh x Bc 11: vit code trong hm View Didload ly ng dn ti tp tin sqlite.

Hnh 5.40 Vit code View Didload Bc 12: vit code cho s kin Click Khai bo i tng lu ng dn database.

106

Hnh 5.41 Khai bo i tng lu ng dn

Hnh 5.42 Lu ng dn vo i tng Khai bo i tng statment

Hnh 5.43 Khai bo i tng sqlite3_stmt Vit lnh truy xut d liu

Hnh 5.44 Lnh truy xut d liu Khai bo i tng lu tr cu truy vn

Hnh 5.45 Khai bo i tng lu cu truy vn


107

Vit code truy vn

Hnh 5.46 Vit code truy vn d liu Kt qu.

108

Hnh 5.47 Kt qu 5.3 S DNG CAMERA IPHONE 5.3.1 Gii Thiu Phn ny s hng dn cc bn cch s dng th vin h tr ca iOS dng camera iPhone chp nh. Th vin iOS cung cp mt lp l UIImagePickController dng qun l vic tng tc vi camera hoc photo library. Tuy nhin UIImagePickController khng th s dng trc tip m cn ti mt i tng khc delegate (tha k) li n. Sau y chng ta s xy dng mt ng dng n gin dng camera chp nh. Giao din ca ng dng ny gm mt UIImageView hin th hnh nh, mt button tn l Chp nh. 5.3.2 V D To ng dng mi t tn l CameraApp.

109

Hnh 5.48 To project mi

Hnh 5.49 Chn ni lu project Thit k giao din ng dng.

110

Hnh 5.50 Thit k giao din nh x cc i tng vo tp tin ViewController.h.

\ Hnh 5.51 nh x i tng

111

Hnh 5.52 Kt qu Trong ViewController, thm on code sau tha k li UIImagePickController.

Hnh 5.53 Tha k UIImagePickController Vit code cho button Chp nh.

Hnh 5.54 Vit code cho button Chp nh Vit code hai phng thc ca UIImagePickController.

112

Hnh 5.55 Vit code cho hai phng thc ca UIImagePickController Vit code cho ViewDidload.

Hnh 5.56 Vit code cho hm ViewDidload Chy ng dng ln thit b tht kim tra kt qu. 5.4 UIIMAGE 5.4.1 Gii Thiu UIImage dng hin th hnh nh, c th s dng cc hiu ng animation hin th hnh nh.

. Hnh 5.57 i tng UIImage


113

Hnh 5.58 UIImage khi ko ra thit k giao din 5.4.2 Cc nh Dng nh H Tr Trn Iphone Cc dng file nh c h tr tt trn iPhone: Tn nh dng Tagged Image File Format (TIFF) Join Photographic Experts Group (JPEG) Graphic Interchange Format (GIF) Portable Network Graphic (PNG) Windows Bitmap Format (DIB) Windows Icon Format Windows Cursor Xwindow bitmap 5.4.3 V D Hin th nh t mt file c sn trn my. Bc 1: Add UIImageView vo StoryBoard. Chn Main.storyboard Tn file m rng .tiff, .tif .jpg, .jpeg .gif .png .bmp, .bmpf .ico .cur .xbm

Hnh 5.59 Chn storyboard


114

Ko th UIImage t hp thoi Accessibility vo Storyboard.

Hnh 5.60 i tng UIImage View

Hnh 5.61 Kt qu sau khi ko vo storyboard Bc 2: nh x UIImageView vo file NATViewController.h dng outlet vi tn imgHinhAnh.

115

Hnh 5.62 Kt qu sau khi nh x Bc 3: Add file hnh vo project ang lm. Click phi chut vo project chn Add Files to...

Hnh 5.63 Thm file vo project

116

Hnh 5.64 Chn file cn thm vo Bc 4: Load file hnh vo UIImage. Cch 1: Chn hnh t hp thoi Image View.

Hnh 5.65 Cch chn t Image View

Hnh 5.66 Kt qu sau khi chn Cch 2: Gi phng thc sau load file hnh vo UIImageView.

Hnh 5.67 Cch s dng code M file NATViewController.m, ti phng thc viewDidLoad.

117

Hnh 5.68 Chn NATViewController

Hnh 5.69 Vit code hin th hnh nh Kt qu.

Hnh 5.70 Kt qu Lu : phng thc viewDidLoad s c gi mi khi chng ta m ng dng.


118

Cch 3: Ko th trc tip i tng Image vo StoryBoard:

Hnh 5.71 Ko th Image vo Storyboard

Hnh 5.72 Kt qu Hin th nh t mt URL: S dng phng thc initWithData load ni dung t url.

Hnh 5.73 Code load ni dung t url M file NATViewController.m, ti phng thc viewDidLoad.

119

Hnh 5.74 M file NATViewController.m

Hnh 5.75 Vit code cho hm ViewDidload Kt qu.

Hnh 5.76 Kt qu

120

5.5 UIALERT VIEW 5.5.1 Gii Thiu UIAlertView l i tng c s dng hin th ni dung thng bo cho ngi dng, hoc ngi dng nhp liu.

Hnh 5.77 UIAlertView

Hnh 5.78 UIAlertView cho php nhp liu 5.5.2 c im Khi to i tng UIAlertView initWithTitle: message: delegate: cancelButtonTitle: otherButtonTitles Cc thuc tnh ca UIAlertView Thuc tnh title message elegate alertViewStyle numberOfButtons cancelButtonIndex firstOtherButtonIndex Din gii Tiu ca Alert View. Ni dung thng bo i tng nhn gi tr t UIAlertView. Kiu ca 1 Alert View khi hin th trn ng dng Tr v s lng buttons c trn Alert View V tr index ca button Cancel trn UIAlertView Gi tr ca nt u tin trong UIAlertView, mc nh l 0.
121

Cc phng thc ca UIAlertView Phng thc addButtonWithTile buttonTitleAtIndex textFieldAtIndex show dismissWithClickedButtonIndex 5.5.3 V D Hin th AlerView dng thng bo. Din gii Gn tiu cho Alert View Ly tiu ca button ti v tr index Ly ni dung ca textField ti v tr index Gi 1 Alert View Hu 1 UIAlertView

Hnh 5.79 Hin th dng thng bo Bc 1: Ti phng thc viewDidLoad khi to i tng AlertView nh sau: thongBao = [[UIAlertView alloc] initWithTitle:@"Lac Hong University" message:@"Webcome to Lac Hong University" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; Bc 2: Hin th AlertView bng phng thc show Thm on code sau vo cui phng thc viewDidLoad: [thongBao show]; Bc 3: Cmd + R chy th, kt qu:

122

Hnh 5.80 Kt qu hin th Hin th AlerView dng Text Field

Hnh 5.81 Hin th dng Text Field Bc 1: Khai bo AlertView Ti viewDidLoad khai bo AlertView nh sau:

Hnh 5.82 Khai bo AlertView Bc 2: Thit lp thuc tnh alertViewStyle cho AlertView l kiu Text.

123

Hnh 5.83 Thit lp thuc tnh Bc 3: Thit lp thuc tnh cho Text .

Hnh 5.84 Thit lp thuc tnh Bc 4: Hin th AlertView.

Hnh 5.85 Hin th AlertView Bc 5: Cmd + R chy th, kt qu:

Hnh 5.86 Hin th kt qu 5.6 UISLIDER 5.6.1 Gii Thiu UISlider l mt i tng cho php ngi dng thay i gi tr bng cch di chuyn thanh trt.
124

Hnh 5.87 UISLIDER 5.6.2 c im Ly gi tr t Slider: Cch 1: dng property value value property Cch 2: dng phng thc setValue setValue:animated: Thit lp gi tr nh nht v ln nht cho Slider: - Thit lp gi tr nh nht: minimumValue - Thit lp gi tr ln nht: maximumValue 5.6.3 V D Bc 1: Thit k giao din nh sau.

Hnh 5.88 Thit k giao din


125

Bc 2: Map cc i tng nh sau:

Hnh 5.89 nh x cc i tng Kt qu sau khi Map

Hnh 5.90 Kt qu sau khi nh x Bc 3: Thit lp gi tr nh nht v ln nht cho Slider trong khong 5 50. M ViewController.m thm on code sau vo cui phng thc viewDidLoad.

126

Hnh 5.91 Thit lp gi tr Thit lp gi tr chn mc nh l 30 thm on code sau vo cui phng thc viewDidLoad.

Hnh 5.92 Thm code vo cui viewDidload Bc 4: Gn kt qu ca Slider vo lblGiaTriSlider khi ngi dng thay i thanh trt. Thm on code sau vo phng thc changeSlider.

Hnh 5.93 Thm code vo phng thc changeSlider Bc 5: Ly gi tr t Slider gn vo lblKetQua khi ngi dng click vo button btnLayGiaTri.

Hnh 5.94 Gn gi tr cho label Bc 6: Cmd + r chy th, kt qu.

127

Hnh 5.95 Kt qu hin th 5.7 UIWEBVIEW 5.7.1 Gii Thiu UIWebView l i tng gip hin th ni dung ca mt url no .

Hnh 5.96 UIWebView


128

Hnh 5.97 Hin th UIWebView 5.7.2 V D Bc 1: Thit k giao din nh sau.

Hnh 5.98 Thit k giao din


129

Bc 2: Map i tng UIWebView vi tn myWebView.

Hnh 5.99 nh x i tng Bc 3: Ti mt url. M file ViewController.m thm on code sau vo cui phng thc viewDidLoad.

Hnh 5.100 Thm code vo viewDidload Chy th, kt qu.

Hnh 5.101 Kt qu chy th Bc 4: Thc hin cc chc nng: back, next, refrest, stop.
130

Qua giao din ln lt nhn gi Ctrl cc i tng (back, next, refrest,top) v ko th vo UIWebView.

Hnh 5.102 To kt cc cho cc chc nng ca button. Thit lp thuc tnh cho UIWebView l Scales Page To Fit.

Hnh 5.103 Chn Scales Page To Fit Bc 5: Chy th, kt qu.

131

Hnh 5.104 Kt qu 5.8 ACTIVITY INDICATOR VIEW 5.8.1 Gii Thiu Activity Indicator View l mt i tng thng bo ch i cho ngi dng.

Hnh 5.105 Activity Indicator View 5.8.2 V D Bc1: Tip tc vi v d ca UIWebView, ko th i tng Activity Indicator View.

132

Hnh 5.106 Ko th Activity Indicator vo giao din Bc 2: Map i tng Activity Indicator View vi tn mySpinner.

Hnh 5.107 nh x i tng Bc 3: Thm protocol <UIWebViewDelegate> trong file ViewController.h

133

Hnh 5.108 Thm Protocol UIWebViewDelegate Bc 4: M file ViewController.m thm 2 phng thc sau. - (void)webViewDidStartLoad:(UIWebView *)webView { //Spinner bt u quay [mySpinner startAnimating]; } Gii thch: phng thc ny s c gi khi i tng UIWebView bt u ti d liu t URL. - (void)webViewDidFinishLoad:(UIWebView *)webView { //Ngng spinner [mySpinner stopAnimating]; //Gn tiu vo "UIWebViewController" NSString* title = [webView stringByEvaluatingJavaScriptFromString: @"document.title"]; self.navigationItem.title = title; }; Gii thch: phng thc ny s c gi khi i tng UIWebView ti d liu t URL xong. Thm on code sau vo cui phng thc myWebView.delegate = self; cho php 2 phng thc trn i tng UIWebView qun l v t gi.
134

Bc 5: Qua giao din thit lp thuc tnh Hides When Stopped cho i tng Activity Indicator View.

Hnh 5.109 Hides When Stopped Bc 6: chy th, kt qu:

Hnh 5.110 Kt qu
135

5.9 ACTIONSHEET 5.9.1 Gii Thiu Action Sheet Cho php ngi dng xc nhn cc hnh ng trn ViewController.

Hnh 5.111 Action Sheet 5.9.2 c im Khi to Action Sheet: initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles Thit lp thuc tnh cho Action Sheet: Delegate : c gi tr l nil hoc mt i tng no . title: Tiu ca Action Sheets. visible: n hin Action Sheet. actionSheetStyle: kiu Action Sheet.

Cu hnh cho cc button trn Action Sheet: Thm button: addButtonWithTitle: Ly tng s button: numberOfButtons Ly tiu ca button: buttonTitleAtIndex: Ly v tr ca button cancel: cancelButtonIndex
136

- Ly v tr ca button u tin: firstOtherButtonIndex Hin th mt Action Sheet: - showInView: 5.9.3 V D Bc 1: Thit k giao din nh sau:

Hnh 5.112 Thit k giao din Bc 2: Thm protocol <UIActionSheetDelegate> v map (action) button vi tn touchBtn kt qu file ViewController.h #import <UIKit/UIKit.h> @interface NATViewController : UIViewController <UIActionSheetDelegate> {

} - (IBAction)touchBtn:(id)sender; @end
137

Bc 3: Ti phng thc touchBtn khi to i tng Action Sheet:

Hnh 5.113 Khi to Action Sheet Bc 4: Hin th Action Sheet bng cch thm on code bn di vo cui phng thc touchBtn.

Hnh 5.114 Hin th Action Sheet Bc 5: Thm phng thc clickButtonAtIndext in ra button m ngi dng chn.

Hnh 5.115 Phng thc in button Bc 6: Chy th, kt qu Output:

Hnh 5.116 Kt qu chy th 5.10 MK MAP VIEW 5.10.1 Gii Thiu MK Map View l mt i tng cung cp giao din bn .

138

Hnh 5.117Map View 5.10.2 V D Bc 1: Thit k giao din nh sau: Ko i tng Map View vo View Controller

Hnh 5.118 Ko th Map View vo


139

Ko Toolbar v cc Bar button vo View Controller check thuc tnh Show User Location cho i tng MKMapView.

Hnh 5.119 Thit k giao din Thm th vin MapKit.framework vo project:

Hnh 5.120 Thm th vin M file ViewController.h import MapKit.h"


140

#import <MapKit/MapKit.h> Chy th, kt qu:

Hnh 5.121 Chy th Bc 2: Map (action) cc i tng: GPS (touchGPS), Map (touchMap), Satellite (touchSatellite), Hybird (touchHybird) vo ViewController.h.

Hnh 5.122 nh x cc button Bc 3: Hin thc phng thc touchGPS M ViewController.m thm on code sau vo phng thc touchGPS:

141

Hnh 5.123 Thm code vo touchGPS Bc 4: Hin thc li phng thc touchMap M ViewController.m thm on code sau vo phng thc touchMap: myMapView.mapType = MKMapTypeStandard; Bc 5: Hin thc li phng thc touchSatellite M ViewController.m thm on code sau vo phng thc touchSatellite: myMapView.mapType = MKMapTypeSatellite; Bc 6: Hin thc li phng thc touchHybird M ViewController.m thm on code sau vo phng thc touchHybird: myMapView.mapType = MKMapTypeHybrid; Bc 7: Chy th, kt qu:

Hnh 5.124 Kt qu

142

5.11 TABLE VIEW CONTROLLER 5.11.1 Gii Thiu Table View Controller c s dng hin th d liu theo dng bng.

Hnh 5.125 Table View 5.11.2 V D Bc 1: Ko th mt Table View Controller sang giao din thit k.

143

Hnh 5.126 Ko th Table View vo giao din Bc 2: To mt lp tn Table View Controller gn vo Table View Controller va ko th. Nhn Ctr + N to 1 lp Chn Objective C class Class: TalbeViewController Subclass of: UITableViewController.

Hnh 5.127 To class mi


144

Qua giao din gn lp va to vo TableViewController

Hnh 5.128 Gn class vi Table View Bc 3: M TableViewController.m bn di @implementation... khai bo 1 mng mangSinhVien: @implementation TableViewController NSMutableArray *mangSinhVien; Bc 4: Khi to mng sinh vin trong phng thc viewDidLoad. mangSinhVien = [[NSMutableArray alloc] initWithObjects: @"Nguyen Anh Tiep", @"Cao Thanh Vang", @"Nguyen Xuan Thanh", @"Nguyen Xuan Thao", @"Nguyen Xuan Hoa", @"Nguyen Hoai Nam", @"Le Thi Bich Ha",
145

@"Pham Thi Anh Nguyet", @"Nguyen Tien Trung", nil]; Bc 5: Ti phng thc numberOfSectionsInTableView sa li nh sau: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } Gii thch: phng thc ny cho php chng ta thit lp s Section trong Table View Controller. Section c dng nh sau:

Hnh 5.129 Section Bc 6: Sa li phng thc numberOfRowsInSection nh sau: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return mangSinhVien.count; }
146

Gii thch: phng thc ny cho php chng ta thit lp s dng trong 1 Section, y chnh l s phn t ca mng Bc 7: ti phng thc cellForRowAtIndexPath bn di // Configure the cell... thm on code sau hin th tn sinh vin ln Table View Controller: NSInteger row = indexPath.row; cell.textLabel.text = mangSinhVien[row]; Bc 8: Cmd + r chy th, kt qu:

Hnh 5.130 Kt qu 5.12 SEARCH BAR 5.12.1 Gii Thiu Search Bar c s dng tm kim trong Table View Controller.

147

Hnh 5.131 Search Bar 5.12.2 V D Bc 1: Tip tc vi v d ca Table View Controller, thm i tng Search Bar and Search Display Controller vo Table View Controller.

Hnh 5.132 Ko th Search Bar vo


148

Bc 2: Map i tng Search Bar vi tn mySearchBar.

Hnh 5.133 nh x i tng Bc 3: B sung protocol <UISearchBarDelegate> s dng c cc phng thc ca i tng Search Bar. M TableViewController.h bn di @interface... thm vo nh sau: #import <UIKit/UIKit.h> @interface TableViewController : UITableViewController <UISearchBarDelegate> { IBOutlet UISearchBar *mySearchBar; } @end Bc 4: M TableViewController.m thm vo phng thc timKiemDuLieu tm kim d liu trong mng mangSinhVien. - (void)timKiemDuLieu { NSPredicate *resultsPredicate = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", mySearchBar.text]; mangKetQua = [[mangSinhVien filteredArrayUsingPredicate:resultsPredicate] mutableCopy]; }
149

Gii thch: phng thc filteredArrayUsingPredicate c h tr sn trong mng v dng tm kim d liu trong mt mng no . Bc 5: Thm vo phng thc textDidChange thc hin tm kim mi khi ngi dng nhp t kho vo Search Bar. - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [self timKiemDuLieu]; } Bc 6: Sa li phng thc numberOfRowsInSection nh sau: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView == self.tableView) { return mangSinhVien.count; } else { [self timKiemDuLieu]; return mangKetQua.count; } } Gii thch: mc nh khi ngi dng khng tm kim th s dng trong mt Section chnh l s phn t ca mng mangSinhVien, nhng khi ngi dng s dng Search Bar tm kim th s dng lc ny chnh l s phn t trong mng kt qu tm kim c mangKetQua. Bc 7: Sa li phng thc cellForRowAtIndexPath nh sau: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell";
150

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

// Configure the cell... NSInteger row = indexPath.row; if (tableView == self.tableView) { cell.textLabel.text = mangSinhVien[row]; } else { cell.textLabel.text = mangKetQua[row]; } return cell; } Gii thch: mc nh khi mng c s dng hin th ln Table View Controll l mng Sinh Vin mangSinhVien nhng khi ngi dng s dng Search Bar tm kim th mng hin th d liu ln Table View Controller lc ny chnh l mng kt qu tm kim mangKetQua. Bc 8: Cmd + r chy th, kt qu:

151

Hnh 5.134 Kt qu 5.13 TRUYN D LIU GIA CC VIEW 5.13.1 Gii Thiu truyn d liu qua li gia cc View Controller trong mt ng dng, NSUserDefaults l mt lp c cc phng thc h tr lm iu ny. 5.13.2 V D Bc 1: Thit k giao din cho nh sau v Map (Outlet) i tng textField vi tn txtHoTen.

152

Hnh 5.135 Thit k giao din Bc 2: Thm mt View Controller vo giao din thit k.

Hnh 5.136 Thm View Controller vo Bc 3: Thm mt lp c tn NATViewController2 nhn Ctrl + N to mt lp Objective-C class Subclass of: UIViewController.

153

Hnh 5.137 Thm class mi Bc 4: tr vo giao din View Controller to bc 2.

Hnh 5.138 Gn class vo giao din Bc 5: Thit k giao din cho View Controller 2 nh sau v i tng Label vi tn lblKetQua.
154

Hnh 5.139 Thit k giao din Bc 6: To lin kt gia 2 View Controller bng cch nhn gi phm Ctrl sau ko th t button Gi trn View Controller th nht sao View Controller th 2 chn modal.

Hnh 5.140 To lin kt gia 2 View Controller


155

Bc 7: Lm tng t bc 6 i vi button Quay lai trn View Controller2. Bc 8: Thc hin truyn d liu t View Controller th nht. M ViewController.m thm phng thc prepareForSegue - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { [[NSUserDefaults standardUserDefaults] setObject:txtHoTen.text forKey:@"HoTen"]; } Gii thch: Phng thc prepareForSegue c gi t ng trc khi chuyn sang mt View Controller khc. Bc 9: Thc hin nhn d liu t View Controller th nht. M NATViewController2.m trong phng thc viewDidLoad b sung on code sau: lblKetQua.text= [[NSUserDefaults standardUserDefaults] objectForKey:@"HoTen"]; Bc 10: Chy th, kt qu:

Hnh 5.141 Kt qu
156

CHNG VI HNG DN XY DNG PHN MM Qua cc ni dung cc chng trc, chc hn bn nm c cch thc xy dng mt ng dng, cng nh hiu v s dng c mt s i tng trong Xcode vo thit k v xy dng ng dng trn iPhone. Tuy nhin b sung, cng c li kin thc cho bn, cng nh gip bn c th t lm c mt ng dng hon chnh t c bn n nng cao, nhm tc gi s gii thiu n bn qu trnh thit k v xy dng hai ng dng hon chnh da trn cc i tng trong Xcode c gii thiu h thng li kin thc m ti liu cung cp, cng nh cho bn lm quen vi vic xy dng ng dng hon chnh. Hai ng dng trong chng ny s c gii thiu v hng dn mt cch chi tit qu trnh thit k v xy dng bn c th thc hin theo mt cch d dng. Hi vng rng sau khi thc hin xong hai ng dng ny, bn c th t tm tng v xy dng nn ng dng ring cho mnh.

6.1 PHN MM KIM TRA M VIN 6.1.1 Gii Thiu Phn mm Kim Tra M VIN l phn mm gip ngi dng c th kim tra m VIN ca xe hi mt cch d dng. T ngi dng c th bit thm thng tin v xe hi theo m VIN nh hng xe, nm sn xut, ni sn xut, nhin liu 6.1.2 Chun B - ng dng s c vit trn phin bn XCode 4 (Xcode 4.6.3) hoc Xcode 5 (vi iu kin a v dng h tr xy dng ng dng chy cho cc phin bn iOS c, ni dung ny s c trnh by sau). - Mt ti khon Google hoc Facebook ng k s dng dch v OCR SDK API v b th vin OCR (xem folder source nh km). - Mt s hnh nh s dng cho phn mm (xem folder source nh km). - C s d liu m VIN (xem trong folder source). 6.1.3 Cu Trc Phn Mm Phn mm Kim tra m VIN c cu trc gm 3 phn: c s d liu v m VIN c lu tr bng SQLite, giao din nhp d liu v hin th d liu (s dng cc i tng trong Xcode) v x l nhn din m VIN trong hnh nh thng qua Cloud OCR SDK API ca hng ABBYY. C s d liu m VIN s dng c s d liu m VIN nm 2013 ca hng Ford. C s d liu ny s c lu tr thng qua h qun tr c s d liu SQLite. Vi vic s dng SQLite, c s d liu s d dng truy cp bng cc cu lnh truy vn ca SQL nh SELECT, CREATE, UPDATE Vic qun l SQLite d dng v n gin thng qua plugin SQLite Manager ca Firefox v c th chy hon ton c lp m khng cn n server. Giao din nhp d liu v hin th d liu s dng cc i tng ca Xcode nh Button, Label, Text Field, View Controller cng nh Camera ca iPhone nhn d liu do ngi dng nhp vo, ng thi hin th d liu c truy xut t SQLite.
158

X l nhn din m VIN trong hnh nh s dng OCR SDK API ca hng ABBYY. Hnh nh s c a ln server, server s x l nhn din v tr v mt on text nhn din c t hnh nh. Phn mm s x l on text tr v t server tch m VIN ra v a vo SQLite tra cu d liu. 6.1.4 C Ch Vn Hnh Phn mm hot ng theo hai c ch chnh. C ch th nht l ngi dng s nhp vo m VIN bng tay, chng trnh s khi to cc cu lnh truy vn SQL v gi n SQLite truy xut d liu v em kt qu hin th ra giao din. C ch th hai s cho php ngi dng s dng camera ca iPhone chp li m VIN v a hnh nh ln OCR Server. Server s x l v tr v mt on text kt qu sau khi nhn din k t trong hnh nh. Phn mm s phi x l on text tr v lc ra c m VIN. Nu hnh nh chnh xc, m VIN s c ly ra v to cu lnh truy vn gi n SQLite. SQLite s truy xut d liu v tr v kt qu. Kt qu s hin th ra giao din.

Hnh 6.1 C ch hot ng ca phn mm


159

6.1.5 Tnh Nng Phn mm Kim tra m VIN cho php ngi dng c th kim tra m VIN ca xe, t c c mt s thng tin v xe nhng hng xe, loi xe, ni sn xut, nm sn xut Ngoi ra phn mm cng h tr ngi dng tm kim theo cc phng n nh nhp vo s VIN hoc s dng camera ca iPhone chp li m VIN ri tra cu.

Hnh 6.2 Giao din tng quan ca phn mm

160

Hnh 6.3 V tr m VIN

Hnh 6.4 Tnh nng nhp m VIN tra cu


161

Hnh 6.5 Giao din camera

Hnh 6.6 Giao din x l hnh nh

162

Hnh 6.7 Giao din kt qu 6.1.6 Tin Hnh ng dng bao gm cc giao din c lp c lin kt li vi nhau thnh mt khi thng nht. Sau y l cc giao din ca phn mm.

Hnh 6.8 Giao din chnh

Hnh 6.9 Giao din v tr m VIN

Hnh 6.10 Giao din nhp m VIN

163

Hnh 6.11 Giao din camera

Hnh 6.12 Giao din x l hnh nh

Hnh 6.13 Giao din kt qu

Bc 1: To project mi.

Hnh 6.14 To project Chn Single View Application.

164

Hnh 6.15 Single View Application t tn project l KiemTraMaVIN. Phn Organization Name v Company Identifier cc bn in theo mnh. Device chn l iPhone.

Hnh 6.16 Ty chn thng s cho project


165

Chn v tr lu project.

Hnh 6.17 Chn v tr lu Chn icon, lauch image cho ng dng.

Hnh 6.18 B sung icon


166

Hnh 6.19 B sung Lauch image Ty chnh project c th chy c trn cc iOS version khc nhau (Vic ny lm trc hay sau khi hon thnh project u c, xem thm ni dung chng VIII). Bc 2: Thit k giao din chnh. t title cho Viewcontroller giao din l GiaoDienChinh.

Hnh 6.20 t Title cho Viewcontroller Ko th label vo giao din v t text l Phn Mm Kim Tra M VIN.

167

Hnh 6.21 Ko Label vo giao din Ko button vo giao din

Hnh 6.22 Ko Button vo giao din


168

nh x button Info Dark.

Hnh 6.23 nh x button Info Vit code cho button Info Dark

Hnh 6.24 Vit code cho button Bc 3: Ko th thm mt Viewcontroller t title l V Tr VIN.

169

Hnh 6.25 View Controller V Tr VIN To lin kt chuyn i view sao cho khi click vo button V Tr VIN trn View Controller - Giao Din Chnh s chuyn sang View Controller-V Tr VIN.

Hnh 6.26 To lin kt gi hai view Thit k giao din cho View Controller V Tr VIN

170

Hnh 6.27 Thit k giao din To kt ni chuyn v giao din chnh khi click vo button Quay Li

Hnh 6.28 To kt ni cho button Quay Li Bc 4: Ko th mt View Controller khc vo , t title l Nhp M VIN.

171

Hnh 6.29 Thm View Controller mi tn l Nhp M VIN Thit k giao din cho View Controller Nhp M VIN.

Hnh 6.30 Thit k giao din


172

Trong [1] Ko mt label vo v nhp ni dung nh hnh. [2] Ko mt text field ngi dng nhp m VIN vo [3] Ko button vo sao cho khi click vo button Xem s tin hnh kim tra m VIN c nhp vo v a n View Controller Kt Qu. Nu click vo Camera s chuyn n view Camera, click vo Quay li s v giao din chnh. Thm mt class mi qun l Nhp M Vin

Hnh 6.31 New File

173

Hnh 6.32 Thm mt class mi

Hnh 6.33 Chn Create


174

Kt qu sau khi to

Hnh 6.33 Kt qu Chn View Controller Nhp M VIN, bn khung Inspector pane, chn tab Identity Inspector.

Hnh 6.34 Gn class vo View Controller nh x button Xem vo Textfield vo.

175

Hnh 6.35 nh x i tng Thm tp tin c s d liu VIN vo project.

Hnh 6.36 Thm CSDL vo project


176

Thm th vin sqlite vo project

Hnh 6.37 Thm th vin h tr sqlite

Hnh 6.38 Kt qu sau khi thm th vin Thm th vin sqlite3.h vo tp tin .h v khai bo i tng contactDB dng sqlite3, i tng databasePath dng NSString lu gi ng dn n database.

177

Hnh 6.39 Thm th vin v khai bo contactDB,databasePath Vit code cho hm viewDidLoad ly ng dn n tp tin sqlite. Bn trong hm ViewDidload, bn vit cc on code sau:

Hnh 6.40 Khai bo cc i tng

Hnh 6.41 Khai bo i tng kim tra tp tin


178

Vit hm bn phm n i khi ngi dng nhn vo Return. Trc ht tha k li UITextFieldDelegate cho view Controller trong NhapMaVIN.h.

Hnh 6.42 K tha UITextFieldDelegate Khai bo thm @property cho Text field

Hnh 6.43 Khai bo property cho Textfield Vit code n bn phm trong NhapMaVIN.m.

Hnh 6.44 Vit code n bn phm Trong ViewDidLoad vit thm

Hnh 6.45 Vit thm cho ViewDidLoad


179

Trong NhapMaVIN.h, ngoi phng thc Xem do button nh x, bn khai bo thm hai phng thc kim tra di m VIN v phng thc kim tra v tr th 9 ca m VIN.

Hnh 6.46 Khai bo thm hai phng thc Vit code cho hai phng thc mi khai bo

Hnh 6.47 Phng thc KiemTraDoDai

Hnh 6.48 Phng thc KiemTraDigit


180

Khai bo bin dppath lu tr ng dn ti tp tin sqlite ly c t hm viewDidLoad

Hnh 6.49 Khai bo bin lu ng dn n tp tin sqlite t hm ViewDidLoad Khai bo bin kiu sqlite3_stmt cha d liu tr v t cu lnh truy vn.

Hnh 6.50 Khai bo bin kiu sqlite3_stmt lu kt qu truy vn Khai bo bin lu cc gi tr c trch xut t d liu tr v.

181

Hnh 6.51 Khai bo trong tp tin NhapMaVIN.h

Hnh 6.52 Khai bo trong tp tin NhapMaVIN.m Vit code cho phng thc Xem ca button nh sau Gn gi tr cho bin dbpath lu tr ng dn sqlite chun ha UTF-8 v bin vin_upcase lu gi tr VIN sau khi chuyn sang dng vit Hoa.

Hnh 6.53 Khai bo bin Kim tra m VIN c NULL hay khng, nu c th thng bo m rng, nu khng th trin khai tip code trong hm else.
182

Hnh 6.54 Nu m VIN l NULL th xut thng bo Trong hm else (nu m VIN khng NULL s thc hin code trong hm else) gn gi tr cho vin_upcase l m VIN vit hoa ton b, sau vit tip cc on code tip theo.

Hnh 6.55 Vit hoa m VIN v gn cho vin_upcase To bin lu kt qu tr v t hm kim tra di VIN v gi hm kim tra xem di VIN c ph hp hay khng.

Hnh 6.56 Lu kt qu kim tra di To bin lu k t v tr th 9 ca m VIN, kim tra xem k t c hp l hay khng.

Hnh 6.57 Lu kt qu kim tra v tr th 9


183

Bt u i su vo vit hm if xem kim tra di v k t v tr 9 c hp l hay khng Nu khng th xut thng bo, nu hp l tin hnh thc thi trong hm else.

Hnh 6.58 Vit code cho iu kin If Tin hnh vit code cho hm else x l nu m VIN tho mn yu cu To cu lnh truy vn cho m vin v tr 1-3, 8,10,11

Hnh 6.59 To cu lnh truy vn v tr 1-3

Hnh 6.60 To cu lnh truy vn v tr 8

184

Hnh 6.61 To cu lnh truy vn v tr 10

Hnh 6.62 To cu lnh truy vn v tr 11 Khai bo bin cha gi tr thu c sau khi m ho cc lnh truy vn v dng h tr UTF-8.

Hnh 6.63 To bin lu gi tr m ha Vit code truy vn d liu vi cc lnh truy vn tng ng. Trc tin kim tra iu kin kt ni d liu, nu kt ni c th trin khai truy vn d liu trong hm if, ngc li bo khng kt ni c.

185

Hnh 6.64 Kim tra m kt ni vi sqlite Vit code truy vn d liu cho m vin 1-3

Hnh 6.65 Code truy vn v tr 1-3 Code truy vn d liu cho m vin 8

186

Hnh 6.66 Code truy vn v tr 8 Code truy vn d liu cho m vin v tr 10

Hnh 6.67 Code truy vn cho v tr 10 Vit code truy vn cho m vin v tr 11
187

Hnh 6.68 Code truy vn cho v tr 11 Sau khi vit xong code truy vn d liu cho m VIN, tin hnh ng kt ni truy xut d liu s dng sqlite3_close. ng thi vit code cho trng hp else ca cu lnh if dng m kt ni vi sqlite.

Hnh 6.69 ng kt ni sqlite v vit lnh else Bc 5: Thm mt View Controller mi vo ng dng, t tn l KQVIN. Thit k theo giao din vi mt button l Quay Li, cn li l cc label hin th.

188

Hnh 6.70 Giao din KQVIN Thm mt class l KetQuaVIN dng ViewController.

Hnh 6.71 New File


189

Hnh 6.72 To class mi

Hnh 6.73 Class KQVIN

190

Hnh 6.74 Create t lp mi thm vo lm lp qun l cho View Controller KQVIN. ng thi t Identity Storyboard ID l tn lp qun l.

Hnh 6.75 Gn class vo Identity


191

nh x cc i tng vo KQVIN

Hnh 6.76 nh x i tng Khai bo bin lu thng tin t Nhp M VIN chuyn qua.

Hnh 6.77 Khai bo bin lu d liu


192

Vit code hin th kt qu ra giao din KQVIN

Hnh 6.78 Vit code hin th d liu ra mn hnh import class NhapMaVIN vo KQVIN

Hnh 6.79 Import class NhapMaVIN Tr li NhapMaVIN.m, import lp qun l ca KQVIN vo Nhp M VIN Controller

Hnh 6.80 Import class KQVIN Vit code chuyn d liu t NhapMaVIN sang KQVIN
193

Hnh 6.81 Vit code chuyn d liu t NhapMaVIN sang KQVIN To kt ni cho button Quay Li ca KQVIN v Nhp M VIN

Hnh 6.82 To kt ni cho button Quay Li ca KQVIN To kt ni cho button Quay Li ca Nhp M VIN v giao din chnh.

194

Hnh 6.83 To kt ni cho button Quay Li ca Nhp M VIN Bc 6: Thm mt view controller mi tn l Camera. Thit k nh giao din vi mt button truy cp camera, mt button a nh ln server x l OCR.

Hnh 6.84 Thit k giao din Trong


195

- [1] Button Quay Li dng tr li giao din chnh. - [2] Button Chp M dng truy cp vo camera ca iPhone. - [3] Button Tra M upload hnh nh chp c ln server. - [4] UIImageView hin th hnh nh. Vi hnh nh mc nh l sample.png (hnh nh c trong folder source). Kt ni button Camera trn Nhp M VIN, button Camera trn giao din chnh vi view controller Camera.

Hnh 6.85 Kt ni cc button Camera vi View Controller Camera Thm class mi vo project qun l ViewController Camera.

196

Hnh 6.86 New File

Hnh 6.87 To class mi

197

Hnh 6.88 Class Camera

Hnh 6.89 Create


198

nh x cc i tng vo tp tin Camera.h

Hnh 6.90 nh x i tng Trong tp tin AppleDelegate.h khai bo i tng UIImage lu nh chp c t camera.

Hnh 6.91 Khai bo UIImage

199

Trong tp tin AppleDelegate.m vit code sau cc View khc c th truy xut imageToProcess d dng.

Hnh 6.92 Vit code Trong AppleDelegate.m Vit thm vo hm didFinishLauching gn hnh nh mc nh cho imageToProcess.

Hnh 6.93 Vit code trong didFinishLauching Thm tp tin nh sample.jpg vo project.

Hnh 6.94 Thm tp tin


200

Hnh 6.95 Chn tp tin sample.jpg v Add Trong tp tin camera.h, tha k li delegate ca UIImagePickerController.

Hnh 6.96 Tha k Delegate ca UIImagePickerController Trong tp tin camera.m, import th vin AppleDelegate.h v vit code sau.

Hnh 6.97 Import th vin AppleDelegate.h


201

Trong hm viewDidload, vit code ly nh c khai bo trong AppleDelegate.h gn vo imageView.

Hnh 6.98 Gn nh trong AppleDelegate vo imageView Vit thm hm viewDidUnload

Hnh 6.99 Vit thm hm viewDidLoad Vit code chp nh. Khai bo i tng UIImagePickerController l imagePicker, sourceType l UIImagePickerControllerSourceTypeCamera chn l s dng camera.

Hnh 6.100 Vit code chp nh Vit code ly nh chp c vo imageView, ng thi lu vo bin ca AppleDelegate.

202

Hnh 6.101 Vit code gn hnh nh t camera vo imageView v AppleDelegate Vit code cho s kin hu chp nh

Hnh 6.102 Vit code cho s kin hy chp nh Thm b th vin OCR vo project.

Hnh 6.103 Add Files vo project

203

Hnh 6.104 Chn th vin OCR v Add Bc 7: Thm mt viewcontroller mi t tn l Nhn Din, thit k nh hnh.

Hnh 6.105 Thit k giao din Nhn Din


204

Trong - [1] Label hin tn ca viewController Nhn Din. - [2] Label hin th trng thi x l ca viewController. - [3] Mt Activity Indicator hin trng thi ang x l. Thm mt class mi l NhanDien qun l viewcontroller mi.

Hnh 6.106 New File

Hnh 6.107 To class mi

205

Hnh 6.108 Class Nhan Dien

Hnh 6.109 Create


206

Thm class NhanDien lm class qun l cho ViewController Nhn Din.

Hnh 6.110 t class Nhan Dien lm class qun l nh x i tng vo tp tin NhanDien.h

Hnh 6.111 nh x i tng Import client.h vo th vin v tha k li lp .

Hnh 6.112 Import Client.h v tha k li ClientDelegate Trong tp tin NhanDien.m, import th vin AppDelegate.h

Hnh 6.113 Import AppDelegate.h


207

Truy cp vo a ch www.ocrsdk.com Register Free Trail

Hnh 6.114 Start free trial now

Hnh 6.115 Register OCR SDK Ti trang ng k, bn c th chn la ng nhp vi ti khon Google, Facebook hoc ng k theo email mi. Bn nn chn ti khon Google rt ngn thi gian.

Hnh 6.116 La chn cch ng k


208

Sau khi ng k v logon thnh cng. Chn Add New Application.

Hnh 6.117 Add New Application in Application Name ri chn Create Application

Hnh 6.118 Create Application Mt khu s c gi v email, bn kim tra email ly mt khu.

Hnh 6.119 Mt khu gi v email


209

Sau khi c mt khu, trong NhanDien.m, khai bo tn application v mt khu ng k vi ABBYY.

Hnh 6.120 Khai bo tn application v mt khu Vit thm code sau y d dng s dng cc bin khai bo bn NhanDien.h

Hnh 6.121 Vit code cho cc bin khai bo trong NhanDien.h Vit hm viewDidUnload

Hnh 6.122 Vit hm viewDidUnload Vit hm viewWillAppear

Hnh 6.123 Vit hm viewWillAppear


210

Vit hm viewDidAppear

Hnh 6.124 Vit hm viewDidAppear Vit hm clientDidFinishUpload

Hnh 6.125 clientDidFinishUpload Vit hm clientDidFinishProcessing

Hnh 6.126 clientDidFinishProcessing Vit hm didFailedWithError x l nu li xy ra.

211

Hnh 6.127 didFailedWithError Trong NhanDien.h, khai bo contactDB dng sqlite3 v databasePath dng NSString s dng tra cu c s d liu.

Hnh 6.128 Khai bo i tng Import th vin sqlite3.h.

Hnh 6.129 Import sqlite3.h Trong NhanDien.h, khai bo cc i tng lu d liu t sqlite.

Hnh 6.130 Khai bo i tng lu kt qu Tip tc khai bo thm cc hm cn s dng.


212

Hnh 6.131 Khai bo cc hm Trong NhanDien.m, import KQVIN.h v AppDelegate.h.

Hnh 6.132 Import th vin Khai bo cc bin lu ng dn, bin dng sqlite3_stmt lu kt qu t sqlite, cc bin bn NhanDien.h truy xut d dng.

Hnh 6.133 Khai bo bin Vit code cho hm viewDidload nh NhapMaVIN.m.

213

Hnh 6.134 Vit code hm viewDidload Vit code cho hm KiemTraDoDai v KiemTraDigit khai bo bn NhanDien.h

Hnh 6.135 Vit code cho hm khai bo Vit code cho hm ChuanHoa bc tch s VIN t d liu tr v. Do d liu t server s tr v mt chui cc k t m server nhn din c, do cn phi chun ha
214

cc k t c bit thnh khong trng, sau tin hnh bc tch m VIN t chui chun ha.

Hnh 6.136 Hm ChuanHoa Vit hm didFinishDownloadData x l d liu tr v ging nh code vit cho button Xem ca view Nhp M VIN. Trc tin, t chui tr v sau khi chy hm ChuanHoa, tin hnh b i k t xung dng cui chui.

Hnh 6.137 B i k t xung dng cui chui

215

Tip theo vit code ly ng dn ca tp tin sqlite v kim tra di, k t v tr 9 ca m VIN ging nh lm trong NhapMaVIN.m.

Hnh 6.138 Vit code ly ng dn database v kim tra v tr th 9 Nu kt qu tr v ca cc hm kim tra l sai, th xut thng bo, nu ng s trin khai tip trong hm else.

Hnh 6.139 Vit code x l cc gi tr tr v t hm kim tra Nu kt qu tr v l ng, th tin hnh thc hin code trong hm else. Vit code trong hm else tng t NhapMaVIN.h. Trc ht to cc cu lnh truy vn.

216

Hnh 6.140 Vit cu lnh truy vn Khai bo cc bin lu li cu lnh truy vn sau khi chun hot UTF-8.

Hnh 6.141 Khai bo bin lu cu truy vn chun ha M kt ni ti c s d liu.

Hnh 6.142 M kt ni ti c s d liu Vit code truy xut d liu cho cc v tr m VIN 1-3, 8, 10, 11.
217

Hnh 6.143 Truy xut d liu v tr 1-3

Hnh 6.144 Truy xut d liu v tr 8

Hnh 6.145 Truy xut d liu v tr 10


218

Hnh 6.146 Truy xut d liu v tr 11

Hnh 6.147 ng kt ni v vit code trng hp khng kt ni c sqlite Vit thm code chuyn d liu sang KQVIN

Hnh 6.148 Vit code chuyn d liu sang KQVIN To lin kt t button Tra M ca viewCamera sang viewNhanDien

219

Hnh 6.149 To lin kt t button Tra M sang view Nhn Din 6.2 PHN MM TM KIM A IM XUNG QUANH (PLACESNEARME) 6.2.1 Gii Thiu Khi i du lch, i chi u hay n mt ni xa l no hu ht chng ta u c nhu cu tm kim nhng a im xung quanh chng ta trong 1 khong cch no (100, 200mt,...).Chng hn: ATM, khch sn, qun n, cafe, khu du lch, sn bay... PlacesNearMe cho php chng ta lm c iu ny. 6.2.2 Chun B - thun tin cho vic build ng dng ln iPhone, ng dng s c vit trn phin bn XCode 4 (Xcode 4.6.3). - Mt ti khon Google s dng dch v Places API. - Mt b hnh nh s dng cho PlacesNearMe lc sn t Google (xem folder source). 6.2.3 Cu Trc Phn Mm PlacesNearMe c cu trc gm hai phn: ly d liu (Places API) v hin th d liu (Cc i tng trong Xcode).
220

Phn ly d liu s dng mt dch v do Google cung cp cho php tm kim cc a im xung quanh mt v tr no , dch v ny c gi l Places API. Places API s nhn vo cc t kha tm kim nh: ta , a im, khong cch cn tm v tr v mt dng vn bn c cu trc c gi l json. Phn hin th d liu da vo cc i tng h tr trong cng c lp trnh Xcode, lp trnh vin s x l v hin th d liu json ln giao din. Cc i tng in hnh trong Xcode m PlacesNearMe s dng: Map View, Web View, Alert View, Image View, Table View Controller 6.2.4 C Ch Vn Hnh Ca Placesnearme PlacesNearMe s gi Google cc t kho tm kim (ATM, School, Hospital,..) Google s tr v mt dng text c cu trc (json), da vo ngun d liu ng dng s x l v th hin ln iPhone.

Hnh 6.150 C ch hot ng ca ng dng

221

6.2.5 Tnh Nng

Hnh 6.151 Cc tnh nng ca phn mm trn giao din chnh

Hnh 6.152 Giao din ca tnh nng tm kim loi a im cn tm


222

Hnh 6.153 Cc tnh nng trn giao din kt qu tm kim

223

Hnh 6.154 Giao din ca tnh nng lc kt qu sau khi chn a im

Hnh 6.155 Cc tnh nng trn giao din bn


224

Hnh 6.156 Cc tnh nng trn giao din thng tin chi tit ca ni tm kim

Hnh 6.157 Cc tnh nng trn giao din duyt web


225

6.2.6 Tin Hnh ng dng s c tch thnh nhiu v d nh chy c lp vi nhau, sau khi hon thin cc v d, bn s ghp cc v d nh ny li to thnh 1 ng dng nh sau:

Hnh 6.158 Giao din chnh

Hnh 6.159 Giao din tm kim

Hnh 6.160 Giao din kt qu tm kim

Hnh 6.161 Giao din bn .

Hnh 6.162 Giao din thng tin chi tit ca ni tm kim

Hnh 6.163 Giao din duyt web.

226

Bc 1: To project M XCode chn Single View Application

Hnh 6.164 To Single View Application Click Next v nhp tn ng dng, check vo cc i tng bn di s dng Storyboad ( dng khi thit k ng dng c nhiu View Controller).

227

Hnh 6.165 Check cc i tng v chn Next Chn v tr cn lu click Ok

228

Hnh 6.166 Chn ni lu project Giao din sau khi to xong

229

Hnh 6.167 ng dng sau khi to xong Bc 2: Xo 2 file NATViewController.h v NATViewController.m v hai file ny s to mi hon ton.

Hnh 6.168 Xa hai file NATViewController Chn Move to Trash xo hon ton

230

Hnh 6.169 Move to Trash Ko th file MainStoryboard.storyboard vo Supporting Files tin cho vic qun l.

Hnh 6.170 Di chuyn MainStoryboard Bc 3: Click chn MainStoryboard.storyboard v xa giao din View Controller

231

Hnh 6.171 Xa ViewController Giao din sau khi hon thnh:

Hnh 6.172 Giao din sau khi hon thnh


232

Bc 4: Xy dng View Controller HomeViewController

Hnh 6.173 Giao din HomeViewController Ko th Table View Controller bng cch: Click chn MainStoryboard.storyboard nhn phm tt (Cmd + option + 0) hoc nhn vo gc phi pha trn chn hnh vung k cui show ca s Utilities.

233

Hnh 6.174 Chn i tng Table View Controller vo Ko th Table View Controller vo mn hnh thit k (Storyboard), kt qu nh sau.

234

Hnh 6.175 Giao din Table View Controller To Navigation Controller: Click chn Table View Controller click menu Editor Embed In Navigation Controller.

235

Hnh 6.176 Chn Navigation Controller Kt qu

Hnh 6.177 Kt qu sau khi to Navigation Controller To lp i tng vit code cho Table View Controller.
236

Khung bn tri gc trn click phi chut vo Project New file (phm tt Cmd + N).

Hnh 6.178 New File Chn Objective-C Class Next

Hnh 6.179 Objective-C Class

237

Subclass of: chn UITableViewController Class: t tn HomeViewController Next.

Hnh 6.180 Next V tr lu mc nh Click Create

238

Hnh 6.181 Create Kt qu:

Hnh 6.182 Kt qu Add lp va to HomeViewController vo TableViewController.


239

Chn TableViewController Identity inspector trong Class chn hoc nhp HomeViewController

Hnh 6.183 Thm class mi to cho Table View Controller To i tng Place vi cc thuc tnh: - imageName: tn hnh; - titleEn: tn hin th bng ting anh - titleVi: tn hin th bng ting vit - placeType: loi ni tm kim - keyWord: t kho tm kim To lp Place bng phm tt Cmd + N Objective-C Class.

240

Hnh 6.184 To lp Place Class: Place Subclass of: NSObject Next

Hnh 6.185 Next


241

To 1 folder tn Classes d qun l bng cch click New Folder

Hnh 6.186 To New Folder lu class Nhp tn Classes click Create Create

Hnh 6.187 Create


242

Kt qu:

Hnh 6.188 Kt qu To mt Group tn Classes tin qun l, phi chut vo project New Group nhp Classes.

Hnh 6.189 New Group


243

Ko th 2 file Place.h v Place.m vo Group Classes

Hnh 6.190 Ko th 2 file vo Classes Kt qu:

Hnh 6.191 Kt qu M Place.h khai bo cc thuc tnh lit k pha trn(Cch khai bo cc thuc tnh ny tng t nh getter/ setter ca C# hoc java).
244

@interface Place : NSObject @property (nonatomic, strong) NSString *imageName; @property (nonatomic, strong) NSString *titleEn; @property (nonatomic, strong) NSString *titleVi; @property (nonatomic, strong) NSString *placeType; @property (nonatomic, strong) NSString *keyWord; @end To lp PlaceManager qun l cc i tng Place, lp PlaceManager s c 2 phng thc chnh: - getArrPlaces: phng thc ny tr v mt mng gm cc Place - setPlace: dng khi to 1 i tng Place Tng t nh trn, to 1 class vi : Class: PlaceManager Subclass of: NSObject lu trong Classes.

245

Hnh 6.192 To mi class Kt qu:

Hnh 6.193 Kt qu
246

M file PlaceManager.h khai bo phng thc getArrPlaces, vic khai bo ny s gip chng ta gi trc tip phng thc getArrPlaces thng qua tn lp PlaceManager v lm c iu ny chng ta s s dng du + thay cho du - trc phng thc (tng t phng thc static bn C# hoc java).
@interface PlaceManager : NSObject + (NSMutableArray *) getArrPlaces; @end

M file PlaceManager.m , bn di di #import "PlaceManager.h", ta import thm lp Place.h s dng c s dng c cc phng thc getter/setter ca lp ny nh sau:
#import "PlaceManager.h" #import "Place.h"

Thm phng thc setPlace to i tng Place nh sau:


+ (Place *)setPlace:(NSString *)image titleEn:(NSString *)titleEn titleVi:(NSString *)titleVi placeType:(NSString *)placeType keyWord:(NSString *)keyWord { Place *pt = [[Place alloc] init]; pt.imageName = image; pt.titleEn = titleEn; pt.titleVi = titleVi; pt.placeType = placeType; pt.keyWord = keyWord; return pt; }

Gii thch: phng thc setPlace tr v 1 i tng Place vi cc thuc tnh: image, titleEn, titleVi, placeType, keyWord. Cng file PlaceManager.m hin thc li phng thc getArrPlaces khai bo file PlaceManager.h trc nh sau:
+ (NSMutableArray *) getArrPlaces { //Lu : plateType & keyWord phi vit thng v chng l cc t kho ca Google (google 247

yu cu vit thng) return [[NSMutableArray alloc] initWithObjects: [self setPlace:@"atm.png" titleEn:@"ATM" titleVi:@"ATM" placeType:@"establishment" keyWord:@"atm"], [self setPlace:@"bank.png" titleEn:@"Bank" titleVi:@"Ngn hng" placeType:@"establishment" keyWord:@"bank"], [self setPlace:@"school.png" titleEn:@"School" titleVi:@"Trng hc" placeType:@"establishment" keyWord:@"school"], [self setPlace:@"bar.png" titleEn:@"Bar" titleVi:@"Bar" placeType:@"establishment" keyWord:@"bar"], [self setPlace:@"coffee_shops.png" titleEn:@"Cafe" titleVi:@"Cafe" placeType:@"establishment" keyWord:@"cafe"], [self setPlace:@"karaoke.png" titleEn:@"Karaoke" titleVi:@"Karaoke" placeType:@"establishment" keyWord:@"karaoke"], [self setPlace:@"bus_station.png" titleEn:@"Bus station" titleVi:@"Trm xe but" placeType:@"bus_station" keyWord:@""], [self setPlace:@"gas_station.png" titleEn:@"Gas station" titleVi:@"Trm xng" placeType:@"gas_station" keyWord:@"station"], [self setPlace:@"supermarket.png" titleEn:@"Supermarket" titleVi:@"Siu th" placeType:@"establishment" keyWord:@"supermarket"], [self setPlace:@"restaurant.png" titleEn:@"Restaurant" titleVi:@"Nh hng" placeType:@"establishment" keyWord:@"restaurant"], [self setPlace:@"lodging.png" titleEn:@"Hotel" titleVi:@"Khch sn" placeType:@"establishment" keyWord:@"hotel"], [self setPlace:@"park.png" titleEn:@"Park" titleVi:@"Cng vin" placeType:@"establishment" keyWord:@"park"], [self setPlace:@"movie_theater.png" titleEn:@"Movie theater" titleVi:@"Rp chiu" placeType:@"establishment" keyWord:@"movie theater"], [self setPlace:@"computer.png" titleEn:@"Computer store" titleVi:@"My tnh" placeType:@"establishment" keyWord:@"computer"], [self setPlace:@"post_office.png" titleEn:@"Post office" titleVi:@"Bu in" placeType:@"establishment" keyWord:@"post_office"], [self setPlace:@"train_station.png" titleEn:@"Train station" titleVi:@"Ga xe la" placeType:@"train_station" keyWord:@""], [self setPlace:@"airport.png" titleEn:@"Airport" titleVi:@"Sn bay" placeType:@"airport" keyWord:@""], [self setPlace:@"bakery.png" titleEn:@"bakery" titleVi:@"Tim bnh" placeType:@"establishment" keyWord:@"bakery"], [self setPlace:@"beauty_salon.png" titleEn:@"Beauty salon" titleVi:@"Lm p" placeType:@"establishment" keyWord:@"beauty_salon"], [self setPlace:@"spa.png" titleEn:@"Spa" titleVi:@"Spa" placeType:@"establishment" keyWord:@"spa"], [self setPlace:@"hair.png" titleEn:@"Hair care" titleVi:@"Tim un c" placeType:@"establishment" keyWord:@"hair"], [self setPlace:@"book_store.png" titleEn:@"Book Store" titleVi:@"Nh sch" 248

placeType:@"establishment" keyWord:@"book_store"], [self setPlace:@"cemetery.png" titleEn:@"Cemetery" titleVi:@"Ngha trang" placeType:@"establishment" keyWord:@"cemetery"], [self setPlace:@"church.png" titleEn:@"Church" titleVi:@"Nh th" placeType:@"establishment" keyWord:@"church"], [self setPlace:@"clothing_store.png" titleEn:@"Clothing store" titleVi:@"Qun o" placeType:@"establishment" keyWord:@"clothing_store"], [self setPlace:@"shoe_store.png" titleEn:@"Shoe store" titleVi:@"Dy dp" placeType:@"establishment" keyWord:@"shoe_store"], [self setPlace:@"convenience_store.png" titleEn:@"Convenience store" titleVi:@"Tim tp ho" placeType:@"establishment" keyWord:@"convenience_store"], [self setPlace:@"electronics_store.png" titleEn:@"Electronics store" titleVi:@"in t" placeType:@"electronics_store" keyWord:@""], [self setPlace:@"furniture_store.png" titleEn:@"Furniture store" titleVi:@"Ni tht" placeType:@"establishment" keyWord:@"furniture_store"], [self setPlace:@"sport.png" titleEn:@"Sport store" titleVi:@"Th thao" placeType:@"establishment" keyWord:@"sport"], [self setPlace:@"hospital.png" titleEn:@"Hospital" titleVi:@"Bnh vin" placeType:@"establishment" keyWord:@"hospital"], [self setPlace:@"pharmacy.png" titleEn:@"Pharmace" titleVi:@"Tim thuc" placeType:@"establishment" keyWord:@"pharmacy"], [self setPlace:@"library.png" titleEn:@"Library" titleVi:@"Th vin" placeType:@"establishment" keyWord:@"library"], [self setPlace:@"museum.png" titleEn:@"Museum" titleVi:@"Bo tng" placeType:@"establishment" keyWord:@"museum"], [self setPlace:@"parking.png" titleEn:@"Parking" titleVi:@"Bi xe" placeType:@"establishment" keyWord:@"parking"], [self setPlace:@"police.png" titleEn:@"Police" titleVi:@"Cnh st" placeType:@"police" keyWord:@""], [self setPlace:@"real_estate_agency.png" titleEn:@"Real estate agency" titleVi:@"Bt ng sn" placeType:@"establishment" keyWord:@"real_estate_agency"], [self setPlace:@"stadium.png" titleEn:@"Stadium" titleVi:@"Sn vn ng" placeType:@"establishment" keyWord:@"stadium"], [self setPlace:@"travel_agency.png" titleEn:@"Travel agency" titleVi:@"V my bay" placeType:@"establishment" keyWord:@"travel agency"], [self setPlace:@"veterinary_care.png" titleEn:@"Veterinary care" titleVi:@"Th y" placeType:@"establishment" keyWord:@"veterinary care"], [self setPlace:@"zoo.png" titleEn:@"Zoo" titleVi:@"S th" placeType:@"zoo" keyWord:@""], [self setPlace:@"car_dealer.png" titleEn:@"Car dealer" titleVi:@"i l xe hi" placeType:@"car_dealer" keyWord:@""], nil]; }

Gii thch:
249

- Phng thc getArrPlaces: tr v 1 mng cc i tng Place - [NSMutableArrayAlloc] initWithObjects: s gip chng ta khi to 1 mng cc i tng. - gi phng thc setPlace ta dng self <ten_phuong_thuc>. VD: [self setPlace:<tham_so_1> <tham_so_2> <tham_so_n>]; Gi th phng thc getArrPlaces va hin thc m bo chng ta c 1mng cc i tng Place. M file HomeViewController.m tm v xo cc dng sau loi b cnh bo:
#pragma mark - Table view data source #warning Potentially incomplete method implementation. #warning Incomplete method implementation.

Kt qu:

Hnh 6.194 Kt qu Khai bo 1 mng arrPlaces bn di @implementation HomeViewController:


@implementation HomeViewController NSMutableArray *arrPlaces;

250

Bn di #import "HomeViewController.h import thm Place.h v PlaceManager.h.


#import "HomeViewController.h" #import "Place.h" #import "PlaceManager.h"

Ti hm viewDidLoad ta gi v in th phng thc getArrPlaces ca lp PlaceManager:


//Gi phng thc getArrPlaces v gn kt qu vo mng arrPlaces arrPlaces = [PlaceManager getArrPlaces]; //In th mng arrPlaces for (Place *p in arrPlaces) { NSLog(@"%@",p.titleVi); }

Kt qu:

Hnh 6.195 Kt qu Sau khi in th m ra c kt qu nh trn, n y tm n, xo hm in th v chng ta khng cn na, kt qu hm viewDidLoad:


- (void)viewDidLoad 251

{ [super viewDidLoad]; //Gi phng thc getArrPlaces v gn kt qu vo mng arrPlaces arrPlaces = [PlaceManager getArrPlaces]; }

Hin th d liu ln giao din, kt qu t c nh sau:

Hnh 6.196 Hin th d liu hin th hnh nh dng li nh trn, chng ta cn to 1 lp GridViewCell,Cmd + N to 1 i tng Class: GridViewCell Subclass of: UITableViewCell Next.

252

Hnh 6.197 To mi mt class Kt qu:

Hnh 6.198 Class mi to M file GridViewCell.h thm cc thuc tnh nh sau:


253

@interface GridViewCell : UITableViewCell @property (nonatomic, strong) UIButton *column1; @property (nonatomic, strong) UIButton *column2; @property (nonatomic, strong) UIButton *column3; @end

Bn trn import <UIKit/UIKit.h> nh ngha cc thng s sau cho Cell ng thi import QuartzCore.h s dng cc hm cu hnh border trong lp ny:
#define CELL_WIDTH 92 // rng ca #define CELL_HEIGHT 80 //Chiu cao ca #define CELL_MARGIN_LEFT 20 //Cch l tri #define CELL_MARGIN_TOP 1 //Cch l trn #import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h>

M file GridViewCell.m bn di @implement GridViewCell, Synthesize s dng c cc columns khai bo bn GridViewCell.h


@implementation GridViewCell @synthesize column1, column2, column3;

To hm configColumn cu hnh giao din cho column. VD: V tr text trong column, font ch, kch thc ch, border,...
- (void)configColumn:(UIButton *)cln { //a text xung v tr cui cng cln.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom; //Thit lp mu ch font v kch thc [cln setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [cln.titleLabel setFont:[UIFont fontWithName:@"Arial" size:14.0]]; [cln.titleLabel setAdjustsFontSizeToFitWidth:YES]; //To border [cln.layer setBorderColor:[[UIColor colorWithWhite:0.8 alpha:1] CGColor]]; cln.layer.borderWidth = 1; //Thm cell vo view [self addSubview:cln]; }

254

Ti hm initWithStyle (y c th xem nh 1 Constructor bn C# hoc java), khi to d liu cho tng ct nh sau:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { column1 = [[UIButton alloc] initWithFrame: CGRectMake(CELL_MARGIN_LEFT, CELL_MARGIN_TOP, CELL_WIDTH, CELL_HEIGHT)]; [self configColumn:column1]; column2 = [[UIButton alloc] initWithFrame: CGRectMake(CELL_WIDTH + CELL_MARGIN_LEFT + 2, CELL_MARGIN_TOP, CELL_WIDTH, CELL_HEIGHT)]; [self configColumn:column2]; column3 = [[UIButton alloc] initWithFrame: CGRectMake(CELL_WIDTH + CELL_WIDTH + CELL_MARGIN_LEFT + 4, CELL_MARGIN_TOP, CELL_WIDTH, CELL_HEIGHT)]; [self configColumn:column3]; } return self; }

Gii thch: - Mi Column ca chng ta s l 1 button do chng ta cn s dng [[UIButton alloc] initWithFrame] khi to 1 button. - CGRectMake: hm ny s xc nh v tr, kch thc ca mt button gm cc tham s (l tri, l trn, rng, chiu cao). M file HomeViewController.m, hm numberOfSectionsInTableView sa 0 thnh 1:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 0; }

Hm numberOfRowsInSection sa li nh sau:
255

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return arrPlaces.count / 3; }

Thm hm configColumn thit lp hnh nn, tiu , hnh ng cho mi column (button)
- (void)configColumn:(UIButton *)column index:(int)index { NSString *image = [[arrPlaces objectAtIndex:index] imageName]; NSString *title = [[arrPlaces objectAtIndex:index] titleVi]; //Gn background cho column (button) [column setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:image]]]; //Gn tiu cho column [column setTitle:title forState:UIControlStateNormal]; //Thm hnh ng cho column [column addTarget:self action:@selector(clickButtons:) forControlEvents:UIControlEventTouchUpInside]; }

import thm "GridViewCell.h" Hm cellForRowAtIndexPath sa li nh sau:


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; GridViewCell *cell = (GridViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; cell = [[GridViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.selectionStyle = UITableViewCellAccessoryNone; //Dismiss line of cells self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; // Configure the cell... int row = indexPath.row; int firstColumn = row * 3; [self configColumn:cell.column1 index:firstColumn]; [self configColumn:cell.column2 index:firstColumn + 1]; [self configColumn:cell.column3 index:firstColumn + 2]; return cell; 256

Thm hm heightForRowAtIndexPath u cu hnh chiu cao cho Row


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 82; }

Qua MainStoryboard.storyboard cu hnh cho cell ca TableViewController nh sau:

Hnh 6.199 Cu hnh cho Cell Chp th mc Images trong source v b vo bn trong project nh sau:

257

Hnh 6.200 Th mc ti v Ko th th mc images bn trong project vo XCode:

Hnh 6.201 Ko th th mc hnh nh vo project Check Copy items... Click Finish

258

Hnh 6.202 Chn Copy items Chy th (cmd + r) kt qu:

259

Hnh 6.203 Giao din kt qu Khi click vo cc hnh (button) s b li do chng ta cha c hm clickButton add trc (xem hm configColumn), thm hm selectedIndex v clickButton nh sau:
- (int)selectedIndex:(id)sender { NSString *selectedTitle = [sender currentTitle]; int i =0; for (Place *p in arrPlaces) { if ([selectedTitle isEqualToString:p.titleEn] || [selectedTitle isEqualToString:p.titleVi]) { return i; } i++; } return i; } 260

- (void)clickButtons:(id)sender { int selected = [self selectedIndex:sender]; NSLog(@"%i.%@",selected, [arrPlaces[selected] titleVi]); }

Gii thch: hm selectedIndex s gip chng ta xc nh v tr (index) m ngi dng click vo hnh nh Chy ng dng kt qu sau khi click vo cc hnh

Hnh 6.204 Kt qu Bc 5: Xy dng View Controller FindingPlaceViewController FindingPlaceViewController s hin th kt qu tm kim c t Google nh sau:

Hnh 6.205 Giao din FindingPlace


261

To thm 1 TableViewController, 1 lp FindingPlaceViewController v t tn cho TableViewCell l Cell. Ko th thm 1 TableViewController vo giao din thit k

Hnh 6.206 To mi TableView Cmd + N to 1 lp vi Class: FindingPlaceViewController Subclass of: UITableViewController.

262

Hnh 6.207 To mi Class Kt qu

Hnh 6.208 Kt qu to class mi

263

Add lp va to FindingPlaceViewController vo TableViewController Chn TableViewController Identity inspector trong Class chn hoc nhp FindingPlaceViewController

Hnh 6.209 Thm class mi vo Table View Controller t tn Cell cho TalbeViewCell

Hnh 6.210 t tn Cell


264

Vo https://code.google.com/apis/console/ ng k v s dng dch v Places API ca Google:

Hnh 6.211 ng k dch v Google Vo Registered apps BrowserKey... ly key:

Hnh 6.212 Ly key API Key

265

Hnh 6.213 Key Google API Request th HTTP URL ca Google, tham kho ti Y. Google HTTP URL: https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<v_>,<kinh_ >&radius=<khong_cch_tm>&types=<loi_ni_tm>&keyword=<API_KEY>&sens or=true&key=<t_kho_tm> VD: https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=10.970396,106. 915351&radius=400&types=establishment%7Cestablishment&sensor=true&key=AIzaSy BKBekY4nxGHKh6wGqCtNGtMJRbl7FmTKM&keyword=school. Kt qu Google tr v ti liu dng json:

Hnh 6.214 Kt qu Google tr v dng Json


266

Gii thch: - location: bt u tm kim ti v tr no. VD: 10.953212,106.802378 - Radius: tm kim trong phm vi khong cch l bao nhiu (meters). VD: 400 met - Types: loi ni cn tm, nhng loi ni ny do Google nh ngha. VD: establishment, school, hostpital, atm,... Tham kho ti
https://developers.google.com/places/documentation/supported_types.

- Keyword: t kho cn tm, cho chng ta t nh ngha. VD: school, university,... - Key: API Key ng k trn. VD: AIzaSyBKBekY4nxGHKh6wGqCtNGtMJRbl7FmTKM To lp Google request cc HTTP URL ca Google. Lp Google s c cc phng thc tr v ti liu dng json. Cmd + N to lp mi Class: Google Subclass of: NSObject Next

Hnh 6.215 To lp Google


267

Kt qu:

Hnh 6.216 Kt qu M Google.h khai bo cc phng thc sau:


//nh ngha 1 API Key #define GOOGLE_API_KEY @"AIzaSyBKBekY4nxGHKh6wGqCtNGtMJRbl7FmTKM" #import <Foundation/Foundation.h> //Thm th vin <CoreLocation/CoreLocation.h> s dng CLLOcationCoordinate2D //(y l mt kiu d d liu strut gm v (latitude) v kinh (longitude) #import <CoreLocation/CoreLocation.h> @interface Google : NSObject //phng thc searchPlaces tm cc a im xung quanh + (NSDictionary *)searchPlaces:(CLLocationCoordinate2D )coordinate radius:(NSString *)radius placeType:(NSString *)placeType keyword:(NSString *)keyword; 268

//khi c a im ri, chng ta s cn tm khong cch t v tr hin ti ti a im , //phng thc searchDistances s lm iu ny. + (NSDictionary *)searchDistances:(NSString *)origins destinations:(NSString *)destinations; //searchDetail s ly thng tin chi tit v mt ni no da vo tham s reference t //searchPlaces. + (NSDictionary *)searchDetail:(NSString *)reference; //searchPlacePhoto ly url ca mt tm hnh da vo photoReference t searchPlaces + (NSData *)searchPlacePhoto:(NSString *)photoReference; @end

M file Google.m hin thc li cc phng thc khai bo trn:


#import "Google.h" @implementation Google + (NSDictionary *)searchPlaces:(CLLocationCoordinate2D )coordinate radius:(NSString *)radius placeType:(NSString *)placeType keyword:(NSString *)keyword { NSString *url = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location= %f,%f&radius=%@&types=%@&keyword=%@&sensor=true&key=%@",coordinate.latitude, coordinate.longitude, radius, placeType, keyword, GOOGLE_API_KEY]; return [self queryGooglePlaces:url]; } + (NSDictionary *)searchDistances:(NSString *)origins destinations:(NSString *)destinations { NSString *url = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/distancematrix/json?origins=%@&de stinations=%@&mode=walking&sensor=true", origins, destinations]; return [self queryGooglePlaces:url]; } + (NSDictionary *)searchDetail:(NSString *)reference { NSString *url = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/details/json?reference=%@&s ensor=true&key=%@", reference, GOOGLE_API_KEY]; return [self queryGooglePlaces:url]; } + (NSData *)searchPlacePhoto:(NSString *)photoReference { NSString *strURL = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photor eference=%@&sensor=true&key=%@",photoReference,GOOGLE_API_KEY]; NSURL *url = [NSURL URLWithString:strURL]; 269

NSData *imgData = [[NSData alloc] initWithContentsOfURL:url]; return imgData; } /*queryGooglePlaces s thc hin request mt url ln Google v tr v json, cc phng thc khc (searchPlaces, searchDistances, searchDetail, searchPlacePhoto) ch cn truyn vo 1 chui url v nhn kt qu json tr v.*/ + (NSDictionary *)queryGooglePlaces:(NSString *)urlGoogle { NSURL *googleResquestURL = [NSURL URLWithString:[urlGoogle stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSData *data = [NSData dataWithContentsOfURL:googleResquestURL]; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; return json; } @end

Hin th d liu ln FindingPlaceViewController M FindingPlaceViewController.m tm v xo cc dng sau loi b cnh bo:


#pragma mark - Table view data source #warning Potentially incomplete method implementation. #warning Incomplete method implementation.

import thm Google.h:


#import "FindingPlaceViewController.h" #import "Google.h"

Di @implementation FindingPlaceViewController khai bo mng ton cc arrPlaceSearching hng kt qu tr v sau khi request ti Google v 1 bin coodinate lu to hin :
@implementation FindingPlaceViewController NSMutableArray *arrPlaceSearching; CLLocationCoordinate2D coordinate;

Thm hm searchPlacesFromGoogle nhn kt qu json t Google sau chuyn v Mng.


270

- (NSMutableArray *)searchPlacesFromGoogle:(NSString *)radius placeType:(NSString *)placeType keyword:(NSString *)keyword { //Tm kim cc a im t google. NSDictionary *json = [Google searchPlaces:coordinate radius:radius placeType:placeType keyword:keyword]; return [json objectForKey:@"results"]; }

Ti viewDidLoad request th Google:


- (void)viewDidLoad { [super viewDidLoad]; coordinate.latitude = 10.953212; coordinate.longitude = 106.802378; NSString *radius = @"10000"; NSString *placeType = @"establishment"; NSString *keyWord = @"school"; arrPlaceSearching = [self searchPlacesFromGoogle:radius placeType:placeType keyword:keyWord]; NSLog(@"%@",arrPlaceSearching); }

Chn MainStoryboard.storyboard ko th mi tn t NavigationController qua FindingPlaceViewController chy th FindingPlaceViewController:

Hnh 6.217 t ch u tin chy th FindingPlace View Controller


271

m bo c kt ni internet trc khi chy, Cmd + R chy th, kt qu:

Hnh 6.218 Kt qu chy th Da vo mng d liu NSDictionary nh trn, chng ta s trch cc thuc tnh: - name: tn a im - vicinity: a ch - units: s km - latitude: v - longitude: kinh - reference: ly thng tin chi tit ca a im Sau khi trch ra cc thuc tnh trn chng ta s y d liu vo i tng PlaceSearching, Cmd + N to i tng ny Class: PlaceSsearching Subclass of: NSObject.
272

Hnh 6.219 To mi class Kt qu:

Hnh 6.220 Kt qu to mi class


273

M file PlaceSearching.h khai bo cc thuc tnh nh sau:


#import <Foundation/Foundation.h> @interface PlaceSearching : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *vicinity; @property (nonatomic, strong) NSString *units; @property (nonatomic, strong) NSString *latitude; @property (nonatomic, strong) NSString *longitude; @property (nonatomic, strong) NSString *reference; @end

Quay li file FindingPlaceViewController.m import thm PlaceSearching.h


#import "FindingPlaceViewController.h" #import "Google.h" #import "PlaceSearching.h"

Thm phng thc searchDistancesFromGoogle, phng thc ny s tr v 1 mng cc khong cch (s km):
- (NSMutableArray *)searchDistancesFromGoogle:(NSMutableArray *)arrPlaces { //Ly cc to (latitude,longitude) ca mng a im va tm c (arrPlaces) tm khong cch (s Km. VD: 2.5 Km) //v kt qu tm c vo mng arrDisstances. NSString *origins= [NSString stringWithFormat:@"%f,%f", coordinate.latitude, coordinate.longitude]; NSString *destinations = [self getDestinations:arrPlaces]; //da vo to gc v to ch ly s Km. NSDictionary *json = [Google searchDistances:origins destinations:destinations]; //(*) VD: NSLog(@"%@",[json objectForKey:@"rows"] objectAtIndex:0] objectForKey:@"elements"]); return [[[json objectForKey:@"rows"] objectAtIndex:0] objectForKey:@"elements"]; } - (NSString *)getDestinations:(NSMutableArray *)arrPlaces { NSString *strDestinations; if ([arrPlaces count] > 0) { NSDictionary *geometry = [[arrPlaces objectAtIndex:0] objectForKey:@"geometry"]; NSDictionary *location = [geometry objectForKey:@"location"]; NSString *lat = [location objectForKey:@"lat"]; NSString *lng = [location objectForKey:@"lng"]; 274

int count = [arrPlaces count]; //Gn to u tin vo chui strDestinations strDestinations = [NSString stringWithFormat:@"%@,%@", lat, lng]; //Ghp cc to cn li vo chui strDestinations phn cch bi du "|" for (int i=1; i<count; i++) { geometry = [[arrPlaces objectAtIndex:i] objectForKey:@"geometry"]; location = [geometry objectForKey:@"location"]; lat = [location objectForKey:@"lat"]; lng = [location objectForKey:@"lng"]; strDestinations = [NSString stringWithFormat:@"%@|%@,%@", strDestinations, lat, lng]; } } return strDestinations; }

Gii thch: - Phng thc getDestinations s ly ra tt c cc to trong mng m searchPlacesFromGoogle tr v, sau ghp cc to ny li thnh 1 chui cc to phn cch nhau bi du |. VD: 10.970549,106.915440|10.980949,106.915440|10.970549,106.915440|10.9809 49,106.915440 hoc NULL - Da vo to gc v chui to nh trn, hm searchDistancesFromGoogle s request ti Google v nhn v ti liu json cha cc khong cch, sau searchDistancesFromGoogle s chuyn json v thnh mng v tr mng v. C th hm searchDistancesFromGoogle s thc thi HTTP URL sau ca Google: http://maps.googleapis.com/maps/api/distancematrix/json?origins=10.953212, 106.802378&destinations=10.970549,106.915440|10.980949,106.915440|10.9 70549,106.915440|10.980949,106.915440&mode=walking&units=imperial&s ensor=true

275

Kt qu:

Hnh 6.221 Kt qu thc thi Chy th hm searchDistanceFromGoogle bng cch sa li hm viewDidLoad nh sau:
- (void)viewDidLoad { [super viewDidLoad]; coordinate.latitude = 10.953212; coordinate.longitude = 106.802378; NSString *radius = @"10000"; NSString *placeType = @"establishment"; NSString *keyWord = @"school"; arrPlaceSearching = [self searchPlacesFromGoogle:radius placeType:placeType keyword:keyWord]; NSLog(@"%@",[self searchDistancesFromGoogle:arrPlaceSearching]); }

Kt qu:

276

Hnh 6.222 Kt qu chy th Tng kt: sau 2 ln chy th, chng ta c 2 mng m phn t ca mi mng chnh l 1 NSDictionary (kiu d liu gm c key v value): Mng u tin c tr v t hm searchPlacesFromGoogle:

277

Hnh 6.223 Mng th nht tr v Mng th hai c tr v t hm searchDistancesFromGoogle

278

Hnh 6.224 Mng th hai tr v Ch nhng vung khoanh pha trn chnh l nhng thuc tnh ca lp PlaceSearching m ti cn ly ra. ly ra cc thuc tnh t 2 mng pha trn, ti s s dng 1 hm getPlaceSearching c nhim v ly cc thuc tnh ti khoanh pha trn v a vo 1 mng cc i tng PlaceSearching, hm ny nh sau:
//Tr v: mng arrPlaceSearching t 2 mng arrPlaces v arrDistances -(NSMutableArray *)getPlaceSearching:(NSMutableArray *)arrPlaces { NSMutableArray *arrPlaceSearching = [[NSMutableArray alloc] init]; if ([arrPlaces count] > 0) { NSMutableArray *arrDistances = [self searchDistancesFromGoogle:arrPlaces]; int count = [arrPlaces count]; for (int i=0; i<count; i++) { NSDictionary *geometry = [arrPlaces[i] objectForKey:@"geometry"]; NSDictionary *location = [geometry objectForKey:@"location"]; PlaceSearching *ps = [[PlaceSearching alloc] init]; ps.name = [[arrPlaces objectAtIndex:i] objectForKey:@"name"]; ps.vicinity = [[arrPlaces objectAtIndex:i] objectForKey:@"vicinity"]; ps.latitude = [location objectForKey:@"lat"]; ps.longitude = [location objectForKey:@"lng"]; ps.reference = [arrPlaces[i] objectForKey:@"reference"]; ps.units = [[[arrDistances objectAtIndex:i] objectForKey:@"distance"] 279

objectForKey:@"text"]; [arrPlaceSearching addObject:ps]; } } return arrPlaceSearching; }

Chy th hm getPlaceSearching bng cch sa li viewDidLoad nh sau:


- (void)viewDidLoad { [super viewDidLoad]; coordinate.latitude = 10.953212; coordinate.longitude = 106.802378; NSString *radius = @"10000"; NSString *placeType = @"establishment"; NSString *keyWord = @"school"; NSMutableArray *arrPlaces = [self searchPlacesFromGoogle:radius placeType:placeType keyword:keyWord]; arrPlaceSearching = [self getPlaceSearching:arrPlaces]; for (PlaceSearching *ps in arrPlaceSearching) { NSLog(@"%@",ps.name); } }

Kt qu:

Hnh 6.225 Kt qu tr v

280

Sa li 2 hm numberOfSectionsInTableView v numberOfRowsInSection nh sau:


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return arrPlaceSearching.count; }

Thm hm createLabel to Label cho Cell


- (UILabel *)createLabel:(CGRect)rect font:(NSString *)font size:(int)size text:(NSString *)text { UILabel *lbl = [[UILabel alloc] initWithFrame:rect]; [lbl setFont:[UIFont fontWithName:font size:size]]; [lbl setAdjustsFontSizeToFitWidth:YES]; lbl.text = text; return lbl; }

Ti hm cellForRowAtIndexPath sa li nh sau:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; int row = indexPath.row; PlaceSearching *ps = [[PlaceSearching alloc] init]; ps = arrPlaceSearching[row]; // Configure the cell... //Set name UILabel *lblName = [self createLabel:CGRectMake(5, 5, 310, 20) font:@"Arial-BoldMT" size:17 text:ps.name]; [cell.contentView addSubview:lblName]; //Set vicinity UILabel *lblVicinity = [self createLabel:CGRectMake(5, 25, 290, 20) font:@"Arial" size:14 text:ps.vicinity]; 281

[cell.contentView addSubview:lblVicinity]; //Set numbers UILabel *lblNumbers = [self createLabel:CGRectMake(0, 48, 320, 10) font:@"Arial" size:10 text:[NSString stringWithFormat:@"%i",row+1]]; lblNumbers.textAlignment = NSTextAlignmentCenter; [cell.contentView addSubview:lblNumbers]; //Set Distance (kilometers) UILabel *lblDistance = [self createLabel:CGRectMake(260, 46, 60, 15) font:@"Arial" size:13 text:ps.units]; [cell.contentView addSubview:lblDistance]; return cell; }

Set chiu cao cho tng dng trong TableViewController


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 65; }

Cmd + R chy th kt qu:

Hnh 6.226 Kt qu chy th

282

Bc 6: Xy dng ViewController MapViewController

Hnh 6.227 Map View Controller Thit k giao din: Click MainStoryboard.storyboar Ko th View Controller vo storyboard:

283

Hnh 6.228 Ko th View Controller Ko th mi tn t Finding Place View Controller sang View Controller.

Hnh 6.229 t cho View Controller chy th trc


284

Ko th i tng Map View vo View Controller

Hnh 6.230 Ko th Map View vo View Controller Ko th Toolbar vo View Controller

285

Hnh 6.231 Ko th Toolbar vo giao din Ko th thm 3 Bar button item vo Toolbar:

Hnh 6.232 Ko th Bar button item vo Toolbar Gia cc Bar button ko th Flexible Space Bar Button Item

286

Hnh 6.233 Ko th Flexible Space Bar Button Item vo Cu hnh cho Bar button item u tin:

Hnh 6.234 Cu hnh Bar button item Cc bar button khc lm tng t vi image: map.png, full_screen.png, detail.png

Hnh 6.235 Cc button khc tng t To 1 Class MapViewController v add vo ViewController va to.

287

Cmd + N to Object Objective-C Class Class: MapViewController Subclass of: UIViewController.

Hnh 6.236 To mi class Kt qu:

288

Hnh 6.237 Class mi to Click MainStoryboard.storyboard Click ViewController Class: MapViewController.

Hnh 6.238 Thm class cho MapViewController Map cc i tng vo file MapViewController.h Click MainStoryboard.storyboard click Assistant editor
289

Hnh 6.239 nh x i tng Click chn i tng cn map ko th vo gia @interface v @end:

Hnh 6.240 Ko th i tng Connection: Action Name: touchBtnGPS

290

Hnh 6.241 Chn loi kt ni Map tng t vi 2 i tng nh sau:

Hnh 6.242 Thc hin tng t cho cc i tng cn li Kt qu:

Hnh 6.243 Kt qu Qua file MapViewController.m chng ta s thy c 3 phng thc mi xut hin:
291

Hnh 6.244 Ba phng thc mi Quay tr li giao din thit k ko thm 1 i tng Round Rect Button

Hnh 6.245 Thm i tng button Cu hnh cc thuc tnh cho Button Type: Custom Phn ni dung trng image: fullscreen_exit.png.

292

Hnh 6.246 Chnh thuc tnh button Check hidden mc nh button ny n

Hnh 6.247 Chn Hidden Kt qu:


293

Hnh 6.248 Kt qu MapView M file MapViewController.h thm khi ngoc { } sau @interface MAPViewController : UIViewController Map cc thuc tnh:

Hnh 6.249 B sung du ngoc

294

Map Tng t cho i tng mi thm vo (Round Rect Button) nhng ko th vo trong khi { }

Hnh 6.250 nh x button Connection: Outlet Name: btnExitFullScreen.

Hnh 6.251 Chn loi kt ni Tng t Map 2 i tng MapView v Toolbar MapView: Connection: outlet Name: myMapView Toolbar: Connection: outlet Name: toolBar

295

Hnh 6.252 nh x cc i tng khc Kt qu (S c 1 li nh do cha importMapKit):

Hnh 6.253 Kt qu

296

Tin hnh import MapKit.h bng cch click vo project Tab Buil Phases Tab Link Binary With Libraries

Hnh 6.254 Thm Framework Click du + xut hin ca s cho php thm frameworks v libraries thm framework MapKit.framework

Hnh 6.255 Thm MapKit import th vin MapKit.h vo file MapViewController s khng cn li .
#import <UIKit/UIKit.h> 297

#import <MapKit/MapKit.h>

Hon tt qu trnh chun b giao din v Map cc i tng, Cmd + R Run th:

Hnh 6.256 Kt qu chy th Hin th Annotation ln MapView. Qua giao din Click chn vo MapView Check chn thuc tnh Shows User Location.

Hnh 6.257 Shows User Location


298

Chy th s thy xut hin Annotation mu xanh (chnh l v tr hin ti ca chng ta nhng do my o cha c nh v GPS nn v tr mc nh l v tr ca Apple)

Hnh 6.258 Kt qu chy th By gi chng ta s in (Plot) Annotation ln MapView, lm c iu ny chng ta cn to 1 lp Annotation Cmd + N to Object Objective-C Class Class: Annottion Subclass of: NSObject.

299

Hnh 6.259 To class mi Kt qu:

Hnh 6.260 Kt qu to class


300

M Annotation.h Khai bo cc thuc tnh nh sau


#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface Annotation : NSObject <MKAnnotation> @property (nonatomic, assign)CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *subtitle; @end

Gii thch: - Coordinate: gi to ca Annotation - Title: Tiu cho Annotation - Subtitle: Ni dung cho Annotation ly ra to hin ti chng ta khai bo thm bin locationManager trong file MapViewController.h bn di IBOutlet UIToolbar *toolBar;
CLLocationManager *locationManager;

Bn di @interface NATMapViewController : UIViewController thm vo cc protocol sau:


<MKMapViewDelegate, CLLocationManagerDelegate, UIActionSheetDelegate>

Kt qu file MapViewController.h:
#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> @interface MAPViewController : UIViewController <CLLocationManagerDelegate> { IBOutlet MKMapView *myMapView; IBOutlet UIButton *btnExitFullScreen; IBOutlet UIToolbar *toolBar; CLLocationManager *locationManager; } 301

- (IBAction)touchBtnGPS:(id)sender; - (IBAction)touchBtnMap:(id)sender; - (IBAction)touchBtnFullScreen:(id)sender; @end

Thm framework CoreLocation.framework

Hnh 6.261 Thm CoreLocation Framework M file MapViewController.m thm hm sau xc nh to hin ti:
- (void)startLocation { if (locationManager == nil) { locationManager = [[CLLocationManager alloc] init]; } locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; }

Ti viewDidLoad in th v tr nh sau:
- (void)viewDidLoad 302

{ [super viewDidLoad]; [self startLocation]; NSLog(@"%@",locationManager.location); }

Kt qu:

Hnh 6.262 Kt qu in th Da vo to hin ti 37.33233141, -122.03121860, in ra 1 Annontation mt v tr no gn vi to hin ti. VD: 37.43233141, -122.13121860. M file MapViewController.m Import lp Annotation to trc :
#import "Annotation.h"

Thm hm sau in Annotation ln MapView:


- (void)addAnnotation:(NSString *)latitude longitude:(NSString *)longitude title:(NSString *)title subtitle:(NSString *)subtitle { //Create a coordinate CLLocationCoordinate2D otherCurrent; otherCurrent.latitude = [latitude floatValue]; otherCurrent.longitude = [longitude floatValue]; //Create an annotation Annotation *myAnnotation = [[Annotation alloc] init]; myAnnotation.coordinate = otherCurrent; myAnnotation.title = title; myAnnotation.subtitle = subtitle; //add an annotation [myMapView addAnnotation:myAnnotation]; }

Chy th bng cch sa li hm viewDidLoad nh sau:


303

- (void)viewDidLoad { [super viewDidLoad]; [self startLocation]; [self addAnnotation:@"37.43233141" longitude:@"-122.03121860" title:@"Nguyen Anh Tiep" subtitle:@"47 E/10 KP.9, P.Tan Hoa, BH-DN"]; }

Kt qu:

Hnh 6.263 Kt qu chy th phng to bn ti v tr hin ti, thm protocol MKMapViewDelegate. M file MapViewController.h sau protocol CLLocationManagerDelegate thm vo MKMapViewDelegate:
<CLLocationManagerDelegate, MKMapViewDelegate>

Mc ch: gi hm didAddAnnotationViews, hm ny s t gi khi mt Annotation no c thm vo MapView. M file MapViewController.m thm hm didAddAnnotationViews:
304

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { MKCoordinateRegion region; region = MKCoordinateRegionMakeWithDistance(locationManager.location.coordinate, 20000, 20000); [mapView setRegion:region animated:YES]; }

Ti viewDidLoad thm vo myMapView.delegate = self; Cmd + R chy th, kt qu:

Hnh 6.264 Kt qu chy th Thc hin chc nng GPS, chc nng ny s xc nh v tr hin ti ca ngi dng trn MapView:

Hnh 6.265 Chc nng GPS


305

M MapViewController.m ti hm touchBtnGPS sa li nh sau:


- (IBAction)touchBtnGPS:(id)sender { myMapView.showsUserLocation = NO; myMapView.showsUserLocation = YES; }

Cmd + R chy th, kt qu:

Hnh 6.266 Chy th Thc hin chc nng Map Type, chc nng ny cho php chng ta chn loi bn . VD: Map, Satellite, Hybrid

Hnh 6.267 Chc nng Map Type M MapViewController.h b sung protocol UIActionSheetDelegate:
306

<CLLocationManagerDelegate, MKMapViewDelegate, UIActionSheetDelegate>

M MapViewController.m ti hm touchBtnMap sa li nh sau:


- (IBAction)touchBtnMap:(id)sender { NSString *title, *canncel; title = @"La chn loi bn "; canncel = @"ng"; //Khi to 1 actionSheet UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title delegate:self cancelButtonTitle:canncel destructiveButtonTitle:nil otherButtonTitles:@"Map", @"Satellite", @"Hybrid", nil]; //Hin th 1 actionSheets [actionSheet showInView:self.view]; }

Cmd + R chy th, kt qu:

Hnh 6.268 Kt qu chy th Nhng cha c g xy ra khi click vo button, gi chng ta s thm hm sau:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0: myMapView.mapType = MKMapTypeStandard; 307

break; case 1: myMapView.mapType = MKMapTypeSatellite; break; case 2: myMapView.mapType = MKMapTypeHybrid; break; default: break; } }

Cmd + R chy th, kt qu:

Hnh 6.269 Kt qu chy th Thc hin chc nng xem ton mn hnh bng cch n thanh Toolbar

Hnh 6.270 Chc nng xem ton mn hnh


308

M MapViewController.m ti hm touchBtnFullScreen:
- (IBAction)touchBtnFullScreen:(id)sender { btnExitFullScreen.hidden = NO; toolBar.hidden = YES; }

Chy th, kt qu:

Hnh 6.271 Kt qu chy th Thc hin tnh nng thu nh mn hnh.

Hnh 6.272 chc nng thu nh mn hnh Map i tng trn (btnExitFullScreen) vi cc thuc tnh:
309

Hnh 6.273 nh x i tng Kt qu MapViewController.h:


#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> @interface MAPViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate, UIActionSheetDelegate> { IBOutlet MKMapView *myMapView; IBOutlet UIButton *btnExitFullScreen; IBOutlet UIToolbar *toolBar; CLLocationManager *locationManager; } - (IBAction)touchBtnGPS:(id)sender; - (IBAction)touchBtnMap:(id)sender; - (IBAction)touchBtnFullScreen:(id)sender; - (IBAction)touchBtnExitFullScreen:(id)sender; @end

M MapViewController.m ti hm touchBtnExitFullScreen:
- (IBAction)touchBtnExitFullScreen:(id)sender { btnExitFullScreen.hidden = YES; toolBar.hidden = NO; }

Chy th, kt qu:


310

Hnh 6.274 Kt qu chy th Bc 7 Xy dng PlaceDetailViewController.

Hnh 6.275 PlaceDetail Ko th mt ViewController mi v thit k giao din nh sau:


311

Hnh 6.276 Ko th View Controller mi vo To mt Class tn PlaceDetailViewController v tr vo ViewController va to. Cmd + N to Object Class: PlaceDetailViewController Subclass of: UIViewController.

312

Hnh 6.277To class mi Kt qu:

Hnh 6.278 Kt qu mi to Qua giao din tr vo ViewController va to

313

Hnh 6.279 Thm class cho View Controller Map cc i tng vo PlaceDetailViewController.h: Map (Outlet) cc i tng theo hnh sau:

Hnh 6.280 nh x i tng Map (Action) cho i tng PhoneNumber:

314

Hnh 6.281 nh x PhoneNumber Kt qu PlaceDetailViewController.h:


#import <UIKit/UIKit.h> @interface PlaceDetailViewController : UIViewController {

IBOutlet UILabel *lblTitle; IBOutlet UILabel *lblAddress; IBOutlet UILabel *lblPhoneNumber; IBOutlet UILabel *lblWebsite; IBOutlet UILabel *lblGooglePlus; IBOutlet UIImageView *imgPhotoPlace; } - (IBAction)touchBtnPhone:(id)sender; @end

Thc hin chc nng hin th text ln giao din: Cmd + N to lp PlaceDetail Objective-C class Class: PlaceDetail Subclass of: NSObject.

315

Hnh 6.282 To class mi Kt qu:

Hnh 6.283 Kt qu to class


316

M PlaceDetail.h to cc thuc tnh nh sau:


#import <Foundation/Foundation.h> @interface PlaceDetail : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *address; @property (nonatomic, strong) NSString *phoneNumber; @property (nonatomic, strong) NSString *website; @property (nonatomic, strong) NSString *googlePlus; @property (nonatomic, strong) NSArray *photos; @end

M PlaceDetailViewController.m import PlaceDetail.h


#import "PlaceDetail.h"

Thm phng thc displayPlaceDetail nh sau:


- (void)displayPlaceDetail:(PlaceDetail *)pd { lblTitle.text = pd.name; lblAddress.text = pd.address; lblPhoneNumber.text = pd.phoneNumber; lblWebsite.text = pd.website; lblGooglePlus.text = pd.googlePlus; //photo s thm sau }

Gii thch: phng thc ny s nhn vo 1 i tng PlaceDetail v hin th cc thuc tnh trong i tng ny ln giao din. Ti viewDidLoad to 1 i tng PlaceDetail v chy th.

317

Hnh 6.284 Giao din chy th Thc hin chc nng gi in thoi. M PlaceDetailViewController.m ti hm touchBtnPhone thm vo nh sau:
- (IBAction)touchBtnPhone:(id)sender { if (lblPhoneNumber.text) { NSString *temp = [lblPhoneNumber.text stringByReplacingOccurrencesOfString:@" " withString:@""]; NSString *phoneStr = [NSString stringWithFormat:@"telprompt://%@",temp]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneStr]]; } }

Gii thch: phng thc ny ly s in thoi t lblPhoneNumber loi b khong trng sau thc hin tnh nng gi bng phng thc sharedApplication. Chc nng gi chng ta s kim tra sau khi build ng dng ln iPhone tht n gin v Simulator khng th gi in. Bc 8 Xy dng WebViewController.

318

Hnh 6.285 Giao din webview Gii thiu: WebViewController c chc nng tng t nh mt trnh duyt web: li li (back), tip tho (next), lm ti (refrest). Thit k giao din nh sau (tng t cch thit k giao din ca MapViewController).

319

Hnh 6.286 Giao din Webview To mt Class WebViewController v tr vo ViewController va to: Cmd + N to mt object Objective-C class Class: WebViewController Subclass of: UIViewController.

Hnh 6.287 To class mi


320

Kt qu:

Hnh 6.288 Kt qu to class Thc hin tr lp va to vo ViewController.

Hnh 6.289 Tr class mi vo ViewController Thc hin chc nng back.

321

Hnh 6.290 Chc nng Back Nhn gi phm Ctrl v ko th i tng bar button Back vo UIWebView nh sau.

Hnh 6.291 Ko th button Back vo UIWebView Xut hin hp thoi Sendt Actions chn goBack

322

Hnh 6.292 Chn GoBack Thc hin chc nng Next

Hnh 6.293 Chc nng Next Thc hin tng t nh va ri chn goForward

Hnh 6.294 Chn goForward Thc hin chc nng Reload.


323

Hnh 6.295 Chc nng Reload Thc hin tng t nh trn chn Reload.

Hnh 6.296 Chn Reload Thc hin chc nng m web vi Safari

Hnh 6.297 Chc nng m Web M file WebViewController Map (Action) cho i tng Safari.

324

Hnh 6.298 nh x i tng Kt qu WebViewController.h


#import <UIKit/UIKit.h> @interface WebViewController : UIViewController - (IBAction)touchSafari:(id)sender; @end

M WebViewController.m bn di @implement... khai bo 1 bin url dng chui:


@implementation WebViewController NSString *url;

sa li phng thc touchSafari nh sau:


- (IBAction)touchSafari:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; }

Gii thch: phng thc sharedApplication c dng m mt chui url no nh: a ch website, s in thoi Thc hin m mt url cho UIWebView: Map (Outlet) cho i tng UIWebView

325

Hnh 6.299 nh x i tng Kt qu WebViewController.h


#import <UIKit/UIKit.h> @interface WebViewController : UIViewController { IBOutlet UIWebView *myWebView; } - (IBAction)touchSafari:(id)sender; @end

M WebViewController.m thm vo phng thc:


- (void)loadURL:(NSString *)urlStr { NSURL *url = [NSURL URLWithString:urlStr]; NSURLRequest *myRequest = [NSURLRequest requestWithURL:url]; [myWebView loadRequest:myRequest]; }

Ti hm viewDidLoad sa li nh sau:
- (void)viewDidLoad { [super viewDidLoad]; url = @"http://lhu.edu.vn"; [self loadURL:url]; }

Qua giao din ko th mi tn t Place Detail View Controller sang Web View Controller chy bng Web View Controller.

326

Hnh 6.300 t chy th Web View Controller Chnh li thuc tnh Scaling cho UIWebView l Scales Page To Fit.

327

Hnh 6.301 Ty chnh thuc tnh Scale Cmd + R chy th, kt qu:

Hnh 6.302 Kt qu chy th


328

Thc hin Activity Indicator View hay n gin l mt Spinner

Hnh 6.303 Activity Indicator View Gii thiu: Spinner dng thng bo cho ngi dng bit chng trnh vn ang chy. Ko th Activity Indicator View vo UIWebViewController.

Hnh 6.304 Ko th Activity Indicator Map (Outlet) Activity Indicator View vo file MapViewController.h

329

Hnh 6.305 Chn loi kt ni M MapViewController.h Thm protocol UIWebViewDelegate, kt qu:


#import <UIKit/UIKit.h> @interface WebViewController : UIViewController <UIWebViewDelegate> { IBOutlet UIWebView *myWebView; IBOutlet UIActivityIndicatorView *mySpinner; } - (IBAction)touchSafari:(id)sender; @end

M MapViewController.m thm cc phng thc sau


- (void)webViewDidStartLoad:(UIWebView *)webView { //Spinner bt u quay [mySpinner startAnimating]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { //Ngng spinner [mySpinner stopAnimating]; //Gn tiu vo "UIWebViewController" NSString* title = [webView stringByEvaluatingJavaScriptFromString: @"document.title"]; self.navigationItem.title = title; }; - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { [mySpinner stopAnimating]; } 330

Gii thch: tt c cc phng thc va thm vo u c UIWebView t ng gi khi: - webViewDidStartLoad: gi khi UIWebView bt u load mt url no . - webViewDidFinishLoad: gi khi UIWebView load xong mt url no . - didFailLoadWithError: gi khi UIWebView load khng thnh cng mt url no . Spinner t n hin chng ta cn thit lp thuc tnh Hides When Stopped cho Spinner.

Hnh 6.306 Hide When Stopped M WebViewController.m b sung thm myWebView.delegate = self; v chy th, kt qu:

331

Hnh 6.307 Chy th ng dng Bc 9: Xy dng SearchingHomeViewController.

Hnh 6.308 Searching Home View Controller

332

Gii thiu: SearchingHomeViewController gip ngi dng tm kim cc a im nhanh hn. Thit k giao din: Ko th TableViewController

Hnh 6.309 Ko th Table View Thm Search Bar and Search Diplay Controller.

333

Hnh 6.310 Ko th Search bar t tn Cell

Hnh 6.311 t tn Cell To lp SearchingHoveViewController v tr vo Table View Controller.

334

Cmd + N to i tng Objective-C class Class: SearchingHomeViewController Subclass of: UITableViewController.

Hnh 6.312 To class mi Kt qu:

Hnh 6.313 Kt qu sau khi to class Qua giao din tr vo Table View Controller.

335

Hnh 6.314 Tr class vo Table View Hin th d liu ln giao din: Map (Outlet) i tng Search Bar and Search Diplay Controller vi tn mySearchBar

Hnh 6.315 nh x i tng Kt qu.


#import <UIKit/UIKit.h> @interface SearchingHomeViewController : UITableViewController { IBOutlet UISearchBar *mySearchBar; } @end

M SearchingHomeViewController.m di @implementation... khai bo 2 mng.


336

@implementation SearchingHomeViewController NSMutableArray *arrPlaces; NSMutableArray *arrSearchingResults;

Import thm 2 lp:


#import "Place.h" #import "PlaceManager.h"

Sa li 2 phng thc numberOfSectionsInTableView v numberOfRowsInSection


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return arrPlaces.count; }

Sa li phng thc cellForRowAtIndexPath nh sau:


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.selectionStyle = UITableViewCellAccessoryNone; cell.clearsContextBeforeDrawing = YES; int row = indexPath.row; Place *place; if (tableView == self.tableView) { place = arrPlaces[row]; } else { place = arrSearchingResults[row]; } // Configure the cell... UILabel *lblText = [[UILabel alloc] initWithFrame:CGRectMake(80, 11, 230, 20)]; lblText.text = [place titleVi]; [cell.contentView addSubview:lblText]; 337

UIImageView *imgImage = [[UIImageView alloc] initWithFrame:CGRectMake(12, 4, 52, 40)]; imgImage.image = [UIImage imageNamed:[place imageName]]; [cell.contentView addSubview:imgImage]; return cell; }

Chy th:

Hnh 6.316 Kt qu chy th Thc hin tm kim: M SearchingHomeViewController.m Thm phng thc searchThroughData
- (void)searchThroughData { arrSearchingResults = nil; NSPredicate *resultsPredicate; resultsPredicate = [NSPredicate predicateWithFormat:@"SELF.titleVi contains [search] %@", mySearchBar.text]; arrSearchingResults = [[arrPlaces filteredArrayUsingPredicate:resultsPredicate] mutableCopy]; } 338

Gii thch: phng thc ny s dng filteredArrayUsingPredicate tm kim ni dung trong 1 mng (arrPlaces). Sau khi tm xong s tr kt qu v cho mng arrSearchingResults. Thm phng thc textDidChange
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [self searchThroughData]; }

Gii thch: y l phng thc c sn ca i tng searchBar, phng thc ny c gi khi ni dung trong searchBar thay i v mi khi thay i nh vy chng ta s gi ti phng thc searchThroughData tm kim kt qu. Sa li phng thc numberOfRowsInSection
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView == self.tableView) { return arrPlaces.count; } else { [self searchThroughData]; return arrSearchingResults.count; } }

Gii thch: phng thc ny cho bit s dng trong mt table, chng ta s phn ra 2 trng hp, trng hp mc nh tc khi cha s dng searchBar tm kim th s dng trong table chnh l s phn t trong mng arrSearchingResults, trng hp cn li khi s dng tm kim (searchBar) th s dng trong table chnh l s phn t trong mng arrSearchingResults cng chnh l s kt qu tm c. Chy th, kt qu:

339

Hnh 6.317 Kt qu chy th Bc 10: Lin kt cc ViewController: cc phn trc bn thit k cc ViewController nh: HomeViewController, SearchingHomeViewController, FindingPlaceViewController, MapViewController, PlaceDetailViewController, WebViewController. Cc ViewController ny hon ton c th chy c lp v trong phn ny nhim v ca bn l lin kt tt c cc ViewController li vi nhau. Lin kt gia Home View Controller v Searching Home View Controller:

340

Hnh 6.318 Lin kt Home v Searching Home Ti Home View Controller ko th Round Rect Button vo Navigation Bar v thit lp cc thuc tnh cho button nh sau:

341

Hnh 6.319 Ko th button vo Nhp chut ra ngoi v click chn li button identifier: Custom.

Hnh 6.320 Ty chnh button Thit lp rng v chiu cao cho button:

342

Hnh 6.321 Thit lp chiu rng cao cho button Gi Ctrl v ko th button search t Home View Controller sang Searching Home View Controller.

Hnh 6.322 To lin kt Chn Push

343

Hnh 6.323 Chn loi lin kt Chy th, kt qu:

Hnh 6.324 Kt qu chy th Lin kt gia Home View Controller v Finding Place View Controller.

344

Hnh 6.325 Lin kt Home vi Finding Ti Home View Controller nhp chn Cell gi Ctrl v ko th sang Finding Place View Controller.

Hnh 6.326 To lin kt Chn Push

345

Hnh 6.327 Chn Push t thuc tnh identifier l FindingPlcace

Hnh 6.328 t thuc tnh identifer M HomeViewController.m thm on code sau vo cui hm clickButtons.
[self performSegueWithIdentifier:@"FindingPlace" sender:nil];

Gii thch: performSegueWithIdentifier cho php chng ta chuyn View Controller bng code.
346

Chy th, kt qu:

Hnh 6.329 Kt qu chy th Lin kt gia Finding Place View Controller v Map View Controller.

Hnh 6.330 Lin kt Finding v Mapview


347

Ti Finding Place View Controller nhp chn Cell gi Ctrl v ko th sang Map View Controller.

Hnh 6.321 To lin kt Chn Push.

Hnh 6.322 Chn Push Chy th, kt qu.

348

Hnh 6.323 Kt qu chy th Lin kt gia Map View Controller v Place Detail View Controller.

Hnh 6.324 Lin kt Map View v Place Detail

349

Ti Map View Controller nhp chn button detail (gc phi di cng) gi Ctrl v ko th sang Place Detail View Controller.

Hnh 6.235 To lin kt Chn Push

Hnh 6.326 Chn Push C th giao din bn Place Detail View Controller s b lch i, bn t canh chnh li. Chy th, kt qu.

350

Hnh 6.327 Kt qu chy th Lin kt gia Place Detail View Controller v Web View Controller.

Hnh 6.328 Lin kt Place Detail v Web View

351

Ti Place Detail View Controller nhp chn button website (hnh tri a cu) gi Ctrl v ko th sang Web View Controller.

Hnh 6.329 To lin kt Chn Push

Hnh 6.330 Chn Push Tng t vi button Google Plus.

352

Hnh 6.331 Thc hin vi button G+ Chn Push

Hnh 6.332 chn Push Chy th, kt qu.

353

Hnh 6.333 Kt qu chy th Bc 11: Hon thin ng dng. Hon thin Home View Controller. Thm chc nng thit lp khong cch tm kim. Ti Home View Controller nht gi Ctr v ko th i tng button v Navigation Bar thit lp cc thuc tnh nh hnh.

354

Hnh 6.334 Thit lp thuc tnh Map (Outlet) i tng button vo dile HomeViewController.h vi tnbtnDistance.

Hnh 6.335 nh x i tng Map (Action) i tng button vo file HomeViewController.h vi tn touchBtnDistance

355

Hnh 6.336 nh x i tng Thm protocol <UIActionSheetDelegate>, kt qu MapViewController.h:


#import <UIKit/UIKit.h> @interface HomeViewController : UITableViewController <UIActionSheetDelegate> { IBOutlet UIButton *btnDistance; } - (IBAction)touchBtnDistance:(id)sender; @end

M MapViewController.m thm hm:


- (void)changeSlider:(id)sender { UISlider *slider = (UISlider *)sender; NSString *value = [NSString stringWithFormat:@"%.0f m", slider.value]; [btnDistance setTitle:value forState:UIControlStateNormal]; [btnDistance setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; }

Gii thch: phng thc changeSlider c gi khi ngi dng thay i khong cch tm kim. changeSlider s thc hin thay i v lu li gi tr khong cch vo button btnDistance.
- (NSString *)getDistance { NSString *strDistance = btnDistance.titleLabel.text; return [strDistance substringToIndex:strDistance.length-2]; }

356

Gii thch: phng thc getDisstance c s dng loi b m ca khong cch tm kim. VD: 1000 m 1000.
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { [btnDistance setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; }

Gii thch: phng thc actionSheet c gi t ng khi ngi dng bt u thay i slider, phng thc ny s thc hin i mu ch. Sa li hm touchBtnDistance nh sau:
- (IBAction)touchBtnDistance:(id)sender { NSString *title; NSString *cancel; title = @"Chn khong cch tm kim t v tr ca bn (meters)"; cancel = @"ng"; UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:cancel destructiveButtonTitle:nil otherButtonTitles:nil]; //Thm Slider vo ActionSheet UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(30, -50, 260, 70)]; slider.minimumValue = 100; slider.maximumValue = 50000; slider.value = [[self getDistance] floatValue]; [slider addTarget:self action:@selector(changeSlider:) forControlEvents:UIControlEventValueChanged]; [actionSheet addSubview:slider]; //Thm Title vo ActionSheet UILabel *lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, -80, 300, 40)]; lblTitle.text = title; lblTitle.numberOfLines = 0; lblTitle.textAlignment = NSTextAlignmentCenter; [lblTitle setBackgroundColor:[UIColor clearColor]]; lblTitle.textColor = [UIColor whiteColor]; [actionSheet addSubview:lblTitle]; //Chnh li v tr ca ActionSheet [actionSheet showInView:self.view]; [actionSheet setBounds:CGRectMake(0,-90, 320, 280)]; } 357

Gii thch: khi ngi dng chm vo btnDistance, phng thc touchBtnDistance s c gi, phng thc ny s hin th giao din ActionSheet ngi dng thay i khong cch. Chy th, kt qu:

Hnh 6.337 Kt qu chy th Thm chc nng thit lp ngn ng: Ti Home View Controller thm button nh hnh v:

358

Hnh 6.338 Thm button

Hnh 6.339 Cu hnh button Map (Outlet) cho button vi tn btnLanguage v Map (Action) vi tn touchBtnLanguage, kt qu HomeViewController.h:
#import <UIKit/UIKit.h> @interface HomeViewController : UITableViewController <UIActionSheetDelegate> 359

{ IBOutlet UIButton *btnDistance; IBOutlet UIButton *btnLanguage; } - (IBAction)touchBtnDistance:(id)sender; - (IBAction)touchBtnLanguage:(id)sender; @end

M HomeViewController.m ti hm configColumn sa li nh sau:


- (void)configColumn:(UIButton *)column index:(int)index { NSString *image = [[arrPlaces objectAtIndex:index] imageName]; NSString *title; if ([btnLanguage currentImage] == [UIImage imageNamed:@"Vi.png"]) { title = [arrPlaces[index] titleVi]; } else { title = [arrPlaces[index] titleEn]; } //Gn background cho column (button) [column setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:image]]]; //Gn tiu cho column [column setTitle:title forState:UIControlStateNormal]; //Thm hnh ng cho column [column addTarget:self action:@selector(clickButtons:) forControlEvents:UIControlEventTouchUpInside]; }

M HomeViewController.m ti hm touchBtnLanguage sa li nh sau:


- (IBAction)touchBtnLanguage:(id)sender { UIImage *img=[(UIButton *) sender currentImage]; if (img == [UIImage imageNamed:@"Vi.png"]) { [sender setImage:[UIImage imageNamed:@"En.png"] forState:UIControlStateNormal]; } else { [sender setImage:[UIImage imageNamed:@"Vi.png"] forState:UIControlStateNormal]; } [self.tableView reloadData]; }

Chy th, kt qu:

360

Hnh 6.340 Kt qu chy th Ly to hin ti ca ngi dng chun b truyn sang Finding Place View Controller. M HomeViewController.h, import CoreLocation thm protocol CLLocationManagerDelegate v bin locationManager:
#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface HomeViewController : UITableViewController <UIActionSheetDelegate, CLLocationManagerDelegate> { IBOutlet UIButton *btnDistance; IBOutlet UIButton *btnLanguage; CLLocationManager *locationManager; } - (IBAction)touchBtnDistance:(id)sender; - (IBAction)touchBtnLanguage:(id)sender; @end

M HomeViewController.m thm 2 phng thc sau ly to ngi dng:


361

- (void)startLocation { if (locationManager == nil) { locationManager = [[CLLocationManager alloc] init]; } locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { [locationManager stopUpdatingLocation]; }

Thm NSLog(@"%@",locationManager.location); vo cui hm touchBtnLanguage in ra th to ngi dng.


NSLog(@"%@",locationManager.location);

Thm [self startLocation]; vo cui phng thc viewDidLoad, chy th v click vo button language, kt qu:

Hnh 6.341 Kt qu chy th Truyn d liu qua Finding Place View Controller truyn d liu gia cc ViewController ta s dng NSUserDefault v truyn mt i tng vi NSUserDefault th i tng phi c 2 phng thc decoder v encoder M Place.h pha trn #import thm cc key nh sau:
#define ImageNameKey @"ImageNameKey" #define TitleEnKey @"TitleEnKey" #define TitleViKey @"TitleViKey" #define PlaceTypeKey @"PlaceTypeKey" #define KeyWordKey @"KeyWordKey"

Qua file Place.m sa li nh sau:


362

#import "Place.h" @implementation Place @synthesize imageName, titleEn, titleVi, placeType, keyWord; - (id)initWithCoder:(NSCoder *)decoder { self = [super init]; if(self) { imageName = [decoder decodeObjectForKey:ImageNameKey]; titleEn = [decoder decodeObjectForKey:TitleEnKey]; titleVi = [decoder decodeObjectForKey:TitleViKey]; placeType = [decoder decodeObjectForKey:PlaceTypeKey]; keyWord = [decoder decodeObjectForKey:KeyWordKey]; } return self; } - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:imageName forKey:ImageNameKey]; [encoder encodeObject:titleEn forKey:TitleEnKey]; [encoder encodeObject:titleVi forKey:TitleViKey]; [encoder encodeObject:placeType forKey:PlaceTypeKey]; [encoder encodeObject:keyWord forKey:KeyWordKey]; } @end

M HomeViewController.m sa hm clickButton nh sau:


- (void)clickButtons:(id)sender { int selected = [self selectedIndex:sender]; //Truyn d liu qua ViewController k tip (FindingPlaceViewController) Place *p = arrPlaces[selected]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:p]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"Place"]; //Kim tra nu ly c v tr hin ti ca user lc mi thc hin chuyn VIEW if (locationManager.location) { [self performSegueWithIdentifier:@"FindingPlace" sender:nil]; } else { UIAlertView *notifyAlert = [[UIAlertView alloc] initWithTitle:@"Li" message:@"Kim tra \"Wifi\" hoc \"Location Services\"" delegate:self cancelButtonTitle:@"ng" otherButtonTitles:nil, nil]; [notifyAlert show]; } 363

Gii thch: hm ny s gi i tng Place sang cc ViewController khc v kim tra tn ti wifi hoc cho php s dng Location Services hay cha. Thm hm prepareForSegue nh sau:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { CLLocationCoordinate2D coordinate = locationManager.location.coordinate; NSUserDefaults *passingValue = [NSUserDefaults standardUserDefaults]; [passingValue setFloat:coordinate.latitude forKey:@"currentLatitude"]; [passingValue setFloat:coordinate.longitude forKey:@"currentLongitude"]; [passingValue setObject:[self getDistance] forKey:@"distance"]; }

Gii thch: hm ny s s dng NSUserDefaults truyn d liu(to , khong cch) qua cc ViewController khc. Hon thin Finding Place View Controller. Hin th ng a im ngi dng cn tm t Home View Controller M FindingPlaceViewController.m import Place.h:
#import "Place.h"

Thm phng thc passingPlace nhn i tng place m Home View Controller truyn i.
- (Place *)passingPlace { NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"Place"]; return [NSKeyedUnarchiver unarchiveObjectWithData:data]; }

Ti viewDidLoad sa li nh sau:
- (void)viewDidLoad { [super viewDidLoad]; NSUserDefaults *passingValue = [NSUserDefaults standardUserDefaults]; coordinate.latitude = [[passingValue objectForKey:@"currentLatitude"] floatValue]; coordinate.longitude = [[passingValue objectForKey:@"currentLongitude"] floatValue]; NSString *radius = [passingValue objectForKey:@"distance"]; 364

Place *place = [[Place alloc] init]; place = [self passingPlace]; NSString *placeType = place.placeType; NSString *keyWord = place.keyWord; NSMutableArray *arrPlaces = [self searchPlacesFromGoogle:radius placeType:placeType keyword:keyWord]; arrPlaceSearching = [self getPlaceSearching:arrPlaces]; self.navigationItem.title = place.titleVi; }

Chy th chn nh hng kt qu:

Hnh 6.342 Kt qu chy th Thm tnh nng tm kim: Ti Finding Place View Controller ko th Round Rect Button vo Navigation Bar v thit lp cc thuc tnh cho button nh sau:
365

Hnh 6.343 Thm Button vo giao din Nhp chut ra ngoi v click chn li button identifier: Custom.

Hnh 6.344 B sung Identifier Thit lp rng v chiu cao cho button:

366

Hnh 6.345 Thit lp chiu cao rng ca button Map (Action) button search vi tn touchBtnSearch:

Hnh 6.346 nh x i tng Qua giao din ko thm Search Bar and Search Diplay Controller vo Finding Place View Controller.

367

Hnh 6.347 Thm Search bar Map (Outlet) i tng Search Bar vi tn searchBar

Hnh 6.348 nh x i tng Thm protocol UISearchBarDelegate, kt qu FindingPlaceViewController.h:


#import <UIKit/UIKit.h> @interface FindingPlaceViewController : UITableViewController <UISearchBarDelegate> { IBOutlet UISearchBar *searchBar; } 368

- (IBAction)touchBtnSearch:(id)sender; @end

M FindingPlaceViewController.m ti hm touchBtnSearch thm on code sau:


[self.searchDisplayController.searchBar becomeFirstResponder];

Bn di @implementation... khai bo mng arrFilteringResults


NSMutableArray *arrFilteringResults;

Thm 2 phng thc sau:


- (void)searchThroughData { arrFilteringResults = nil; NSPredicate *resultsPredicate = [NSPredicate predicateWithFormat:@"SELF.name contains [search] %@", searchBar.text]; arrFilteringResults = [[arrPlaceSearching filteredArrayUsingPredicate:resultsPredicate] mutableCopy]; } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [self searchThroughData]; }

Sa li hm numberOfRowsInSection nh sau:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView == self.tableView) { return arrPlaceSearching.count; } else { [self searchThroughData]; return arrFilteringResults.count; } }

Ti hm cellForRowAtIndexPath, thay th on code sau vo gia static NSString *CellIdentifier = @"Cell"; v // Configure the cell...:
static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 369

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.selectionStyle = UITableViewCellAccessoryNone; int row = indexPath.row; PlaceSearching *ps; if (tableView == self.tableView) { ps = [arrPlaceSearching objectAtIndex:row]; } else { ps = [arrFilteringResults objectAtIndex:row]; } // Configure the cell...

Thm on code sau vo hm didSelectRowAtIndexPath:


[self performSegueWithIdentifier:@"MapView" sender:nil];

Qua giao din t tn cho lin kt gia Finding Place View Controller v Map View Controller l MapView.

Hnh 6.349 t tn lin kt Chy th, kt qu:

370

Hnh 6.350 Kt qu chy th Truyn d liu qua cc ViewController khc Tng t nh truyn i tng Place, m PlaceManager.h thm vo cc key trc #import...
#define NameKey @"NameKey" #define VicinityKey @"VicinityKey" #define UnitsKey @"UnitsKey" #define LatitudeKey @"LatitudeKey" #define LongitudeKey @"LongitudeKey" #define ReferenceKey @"ReferenceKey"

M PlaceManager.m thm 2 phng thc sau:


#import "PlaceSearching.h" @implementation PlaceSearching @synthesize name, vicinity, units, latitude, longitude, reference; - (id)initWithCoder:(NSCoder *)decoder { self = [super init]; 371

if(self) { name = [decoder decodeObjectForKey:NameKey]; vicinity = [decoder decodeObjectForKey:VicinityKey]; units = [decoder decodeObjectForKey:UnitsKey]; latitude = [decoder decodeObjectForKey:LatitudeKey]; longitude = [decoder decodeObjectForKey:LongitudeKey]; reference = [decoder decodeObjectForKey:ReferenceKey]; } return self; } - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:name forKey:NameKey]; [encoder encodeObject:vicinity forKey:VicinityKey]; [encoder encodeObject:units forKey:UnitsKey]; [encoder encodeObject:latitude forKey:LatitudeKey]; [encoder encodeObject:longitude forKey:LongitudeKey]; [encoder encodeObject:reference forKey:ReferenceKey]; } @end

M FindingPlaceViewController.m thm hmprepareForSegue


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // int selected = self.tableView.indexPathForSelectedRow.row; NSIndexPath *indexPath; PlaceSearching *ps; if (self.searchDisplayController.active) { indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForSelectedRow]; ps = arrFilteringResults[indexPath.row]; } else { indexPath = self.tableView.indexPathForSelectedRow; ps = arrPlaceSearching[indexPath.row]; } NSData *data = [NSKeyedArchiver archivedDataWithRootObject:ps]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"PlaceSearching"]; }

Hon thin Map View Controller. M MapViewController.m import PlaceSearching.h


#import "PlaceSearching.h"

Sa li viewDidLoad nh sau:
- (void)viewDidLoad 372

{ [super viewDidLoad]; [self startLocation]; myMapView.delegate = self; NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"PlaceSearching"]; PlaceSearching *ps = [NSKeyedUnarchiver unarchiveObjectWithData:data]; [self addAnnotation:ps.latitude longitude:ps.longitude title:ps.name subtitle:ps.vicinity]; self.navigationItem.title = ps.name; }

Chy th, kt qu:

Hnh 6.351 Kt qu chy th Thm button home Trn button Home nhn gi Ctrl v ko th v Navigation Controller
373

Hnh 6.352 Thm button Home Chn modal

Hnh 6.353 nh x i tng Hon thin Place Detail View Controller Thc hin load d liu t Google M PlaceDetailViewController.m import Google.h v PlaceSearching.h
#import "Google.h" #import "PlaceSearching.h"

Thm cc phng thc sau:


- (PlaceDetail *)searchPlaceDetailFromGoogle:(NSString *)reference { NSDictionary *json = [Google searchDetail:reference]; NSDictionary *result = [json objectForKey:@"result"]; 374

PlaceDetail *pd = [[PlaceDetail alloc] init]; pd.name = [result objectForKey:@"name"]; pd.address = [result objectForKey:@"formatted_address"]; pd.phoneNumber = [result objectForKey:@"formatted_phone_number"]; pd.website = [result objectForKey:@"website"]; pd.googlePlus = [result objectForKey:@"url"]; pd.photos = [result objectForKey:@"photos"]; return pd; } - (NSData *)searchPlacePhotoFromGoogle:(NSString *)photoReference { return [Google searchPlacePhoto:photoReference]; }

Sa li viewDidLoad nh sau:
- (void)viewDidLoad { [super viewDidLoad]; NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"PlaceSearching"]; PlaceSearching *ps = [NSKeyedUnarchiver unarchiveObjectWithData:data]; PlaceDetail *pd = [self searchPlaceDetailFromGoogle:ps.reference]; [self displayPlaceDetail:pd]; }

Hnh 6.354 Kt qu chy th


375

Load hnh nh t Google: M PlaceDetailViewController.m thm on code sau vo cui hm displayPlaceDetail


NSString *photoReference = [pd.photos[0] objectForKey:@"photo_reference"]; NSData *data = [self searchPlacePhotoFromGoogle:photoReference]; imgPhotoPlace.image = [[UIImage alloc] initWithData:data];

Chy th, kt qu:

Hnh 6.355 Kt qu chy th Thm button home. Thm button home nh giao din sau.

376

Hnh 6.356 Thm button Home Trn button Home nhn gi Ctrl v ko th v Navigation Controller.

Hnh 6.357 To kt ni Chn modal

377

Hnh 6.358 Chn Modal Truyn d liu sang Web View Controller. Thm phng thc sau:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSString *url; if ([sender currentImage] == [UIImage imageNamed:@"website.png"]) { url = lblWebsite.text; } else { url = lblGooglePlus.text; } [[NSUserDefaults standardUserDefaults] setObject:url forKey:@"url"]; }

Hon thin Web View Controller Thm button home Thm button home nh giao din sau:

378

Hnh 6.359 Thm button Home Trn button Home nhn gi Ctrl v ko th v Navigation Controller.

Hnh 6.360 To kt ni Chn modal

379

Hnh 6.361 Chn modal Nhn Url t Place Detail View Controller. M WebViewController.m sa li viewDidLoad nh sau:
- (void)viewDidLoad { [super viewDidLoad]; url = [[NSUserDefaults standardUserDefaults] objectForKey:@"url"]; if (!url) { url = @"https://www.google.com"; } [self loadURL:url]; myWebView.delegate = self; }

Hon thin SearchingHomeViewController. Lin kt gia Searching Home View Controller v Finding Place View Controller. Qua giao din ko th Cell t Searching Home View Controller sang Finding Place View Controller.

380

Hnh 6.362 To lin kt Chn Push.

Hnh 6.363 Chn Push t tn cho lin kt l Finding Place

381

Hnh 6.364 t tn lin kt M SearchingHomeViewController.m ti hm didSelectRowAtIndexPath thm on code sau:


[self performSegueWithIdentifier:@"FindingPlace" sender:nil];

Thm phng thc prepareForSegue


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSIndexPath *indexPath; Place *p; if (self.searchDisplayController.isActive) { indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForSelectedRow]; p = arrSearchingResults[indexPath.row]; } else { indexPath = [self.tableView indexPathForSelectedRow]; p = arrPlaces[indexPath.row]; } //Truyn d liu qua ViewController k tip (NATFindingPlaceTVC) NSData *data = [NSKeyedArchiver archivedDataWithRootObject:p]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"Place"]; }

Chy th, kt qu:

382

Hnh 6.365 Kt qu chy th i mu Navigation Bar. M HomeViewController.m thm phng thc sau:
- (void)configNavigationBarBackground:(UIColor *)bgColor fontColor:(UIColor *)fontColor{ //set bar color self.navigationController.navigationBar.tintColor = bgColor; self.navigationController.navigationBar.alpha = 0.9f; self.navigationController.navigationBar.translucent = YES; [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:fontColor forKey:UITextAttributeTextColor]]; //set back button color [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fontColor, UITextAttributeTextColor,nil] forState:UIControlStateNormal]; }

Thm on code sau vo cui phng thc viewDidLoad


[self configNavigationBarBackground:[UIColor whiteColor] fontColor:[UIColor blackColor]];

383

M NATAppDelegate.m hm didFinishLaunchingWithOptions sa li:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIImage * backButtonImage = [UIImage imageNamed: @"go_back.png"]; backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth: 21.0 topCapHeight: 30.0]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage: backButtonImage forState: UIControlStateNormal barMetrics: UIBarMetricsDefault]; // Override point for customization after application launch. return YES; }

Chy th, kt qu:

Hnh 6.366 Kt qu chy th

384

CHNG VII A NG DNG LN IPHONE Sau khi xy dng hon chnh ng dng cho iPhone, bn cn phi a ng dng ln chy trn thit b iPhone tht kim tra li hot ng ca ng dng trn iPhone. Ngay c khi bn cn ng xy dng ng dng trn Xcode, nhiu ng dng bn cng phi a ln thit b tht mi kim tra c tnh nng, do iOS Simulator tuy m phng iPhone nhng vn cn mt s im hn ch nh khng c camera, khng c microphone Hn na bn s c c mt cm thy ho hng, phn khi khi nhn thy ng dng hon thin ca bn chy n nh trn iPhone ca bn hay trn iPhone ca bn b. Do iu kin cho php cn nhiu hn ch nn ni dung chng ny ch gii thiu n bn cch thc a ng dng ln iPhone jailbreak bng cng c JailCoder. Sau khi c xong chng ny, bn s nm c qu trnh chun b trc khi a ng dng ln iPhone, cng nh cch thc tng bc a ng dng ln iPhone bng cng c JailCoder.

7.1 GII THIU build ng dng ln iPhone (my tht), Apple yu cu lp trnh vin phi c ti khon Apple Developer v chi ph cho 1 ti khon nh vy l 99$/nm, vy th nu chng ta cha c iu kin sm 1 ti khon 99$ liu c cch no build ng dng ln iPhone. Jail Coder gip chng ta lm c iu ny m khng phi mt ti khon 99$ v ng nhin y l mt cch khng chnh thng do vn cn nhiu nhc im khi s dng Jail Coder. Hn na s dng c Jail Coder hiu qu i hi iPhone phi c Jailbreak sn. Bn c th tm hiu thm v Jailbreak iPhone ti: Tinh t: http://www.tinhte.vn/forums/thay-doi-nang-cap-firmware.163/ GSM: http://gsm.vn/forums/firmware-jailbreak-unlock.502/ Heaveniphone: http://heaveniphone.com/forums/22-iphone-hoi-dap-thac-mac-phanmem.html 7.2 QU TRNH CHUN B Bc 1: Download cng c Jail Coder ti http://oneiros.altervista.org/jailcoder/. Jail Coder c ci t trn cc h iu hnh OSX nh Mac OSX Leopard, Snow Leopard, Lion, Lion Mountain Bc 2: Tho cc yu cu sau: - S dng Xcode 3 n Xcode 4. - ci dt AppSync, vo Cydia tm v ci t phn mm AppSync. Lu nn ci t AppSync tng ng vi phin bn iOS chng ta ang s dng. V d: iPhone ang dng iOS 6.x.x th s ci AppSync for iOS6.

386

Hnh 7.1 AppSync - iPhone dng a ng dng ln phi l iPhone c Jailbreak, nhng iPhone Jailbreak hu ht u c icon Cydia trn giao din home ca iPhone.

Hnh 7.2 Biu tng Cydia trn mn hnh - Thot hon ton XCode v cc iOS Simulator ang chy trc khi tin thnh Jail Coder. - Phin bn iOS ang s dng trn iPhone phi ln hn hoc bng phin bn iOS m ng dng chng ta ang s dng.
387

V d: iPhone ang s dng iOS 6, bn mun build ng dng no ln iPhone th ng dng phi s dng iOS SDK 6 tr xung. 7.3 TIN HNH Bc 1: m Jail Coder Click Guided Path.

Hnh 7.3 Guided Patch Click Got it

Hnh 7.4 Got it


388

Click Certificate Root xut hin ca s Keychain Access

Hnh 7.5 Certificate Root

Hnh 7.6 Keychain Access Click Always Trust trust Certificate iPhone Developer, ca s yu cu nhp password xut hin, nhp password hin ti ca my Mac chn Update eStting.

389

Hnh 7.7 Nhp mt khu Quay li ca s Jail Coder click Certificate Private, tng t nhp password (3 ln), s hin th thng bo li nhng khng sao click Ok.

Hnh 7.8 Certificate Private

Hnh 7.9 Nhp mt khu

390

Hnh 7.10 Thng bo li Nu thnh cng chng ta s thy Certificate iPhone Developer c thm vo Keychain Access nh sau:

Hnh 7.11 Certificate iPhone Developer Quay li ca s Jail Coder click Next

Hnh 7.12 Ti ca s Jailcoder click Next

391

Hnh 7.13 Patch my Xcode Click Patch my Xcode xut hin ca s yu cu nhp password.

Hnh 7.14 Nhp mt khu Nu thnh cng s xut hin giao din nh sau

Hnh 7.15 Giao din Patch thnh cng Click Back to Main Menu patch project m chng ta cn build ln iPhone.

392

Hnh 7.16 Ti giao din chnh chn Patch my Project Click Patch My Project sau ko th file *.xcodeproj vo khung Drop here your project!

Hnh 7.16 Ko th project vo Nu thnh cng chng ta s thy JailCoder thng bo Pathed!

Hnh 7.17 Patch thnh cng


393

Bc 2: Kt ni iPhone vo my tnh, nu iPhone t password th phi nhp password m iPhone hoc tt hn nn b password ca iPhone. Bc 3: M Project m chng ta path trc , ch khong 1 pht ( check ID v nhng th linh tinh) s thy xut hin thit b ca chng ta.

Hnh 7.18 Thit b iPhone xut hin trong Xcode Bc 4: M Buil Phaces tab Run Script check vo Run script only when installing

Hnh 7.19 Chn Run script trong Build Phaces Bc 5: Run ng dng, nu thnh cng s thy ng dng ca chng ta trn iPhone.

394

Hnh 7.20 ng dng Run thnh cng s c iCon trn mn hnh Lu : nu xut hin thng bo Launch nh sau th khng sao ht.

Hnh 7.21 Thng bo xut hin nhng khng nh hng

395

CHNG VIII MT S VN KHC Mc d iOS 7 chnh thc c a vo s dng v cho php nng cp ln t cc phin bn iOS trc o. Tuy nhin v mt s l do nh iu kin kinh t, iOS 7 cn li, cha c jailbreak nn ngi dng vn cn dnh s u i cho phin bn iOS c hn. Do khi bn tin hnh xy dng mt ng dng cho iPhone, bn phi suy ngh xem ng dng ca bn s h tr cho phin bn iOS no hay s h tr cho c hai. Nu ng dng ca bn h tr c c iOS 7 ln cc phin bn th l mt iu tuyt vi. ng dng c th tng thch c nhiu i my, nhiu phin bn iOS, tip cn c nhiu ngi dng hn. Tuy nhin bn s t cu hi lm sao ng dng ca bn c th tng thch c nh vy? Bn ng qu lo lng v vic ny, Xcode h tr sn cho bn. Cc vn c trnh by trong chng ny s gip bn hiu hn v cch thc vit mt ng dng cho phin bn iOS c bng cng c Xcode 5, ng thi ni dung chng cng gip bn khm ph tnh nng h tr xy dng ng dng c th chy song song iOS 7 v cc phin bn iOS c hn m Xcode 5 mang n.

396

8.1 XY DNG NG DNG CHO IOS 6 - IOS 6.1 TRN XCODE 5 Xcode 5 c s dng vit ng dng cho cc nn tng iOS 6 v mi hn (iOS 7). Tuy nhin sau khi ci c iOS 6 SDK cho iOS Simulator th bn vn cha th dng Xcode 5 vit ng dng cho iOS 6 cng nh chy th chng trnh trn iOS Simulator vi iOS 6 SDK. Bn cn phi thng qua mt s thao tc tinh chnh cho project ng dng trc khi c th vit chng trnh cho iOS 6 v chy c trn iOS Simulator vi iOS 6 SDK. Sau y l v d minh ha vic xy dng ng dng cho iOS 6 bng Xcode 5. Trc tin cc bn to mi mt project, y project c tn l Ung dung iOS 6.

Hnh 8.1 To Project mi

397

Hnh 8.2 in thng tin Project Trong phn thng tin ca Project, ti mc iOS Deployment Target, la chn phin bn iOS cho ng dng.

Hnh 8.3 La chn phin bn iOS cho project

398

Trong phn Build Settings, mc Architectures, bn chn Standard architetures (armv7, armv7s) c th chy c ng dng trn iOS Simulator vi iOS 6. V mc nh ca Xcode 5 s l Standard architetures (including 64-bit) h tr b x l mi ca Apple cho iPhone vi cng ngh 64bit.

Hnh 8.4 Chn Standard architecture (armv7, armv7s) Chn tp tin Storyboard, bn Utility area, chn File inspector. Ti mc Interface Builder Document, mc nh ca project l c m bng Xcode 5, nu bn mun m ln bng Xcode 4 th bn la chn Xcode 4 trong mc Opens in.

399

Hnh 8.5 La chn phin bn Xcode m project Ti mc Build for, bn chn iOS 6.1 and Later build ng dng cho iOS 6 hoc mi hn.

Hnh 8.6 Chn iOS 6.1 and Later


400

Ti mc View as, bn la chn ch xem ca Storyboard khi thit k giao din.

Hnh 8.7 La chn cch hin th ca giao din khi thit k Sau khi thit lp xong cho project th cc bn c th thit k giao din v vit code cho ng dng mt cch bnh thng. Cc bn thit k giao din gm mt Button, mt Label.

Hnh 8.8 Thit k giao din ng dng


401

Tip theo tin hnh nh x cc i tng vo chng trnh.

Hnh 8.9 nh x cc i tng Sau khi nh x xong, tin hnh vit code cho s kin ca button khi ngi dng chm vo. Khi ngi dng chm vo button th label s hin th ni dung Xin chao ban da den voi ung dung tren iOS 6 viet bang Xcode 5.

Hnh 8.10 Vit code cho s kin Chn phin bn iOS 6 cho iOS Simulator ri chn Run.

402

Hnh 8.11 Chy ng dng trn iOS Simulator iOS 6.1 Kt qu khi chm vo button.

Hnh 8.12 Giao din iOS Simulator khi chy ng dng 8.2 XY DNG NG DNG H TR NHIU VERSION IOS Mc d iOS 7 chnh thc ra mt, tuy nhin s lng ln ngi dng vn ang cn iOS 6 ch cha hon ton nng cp ln ht. Do khi vit ng dng, iu t ra l bn vit ng dng cho phin bn iOS no, nu bn vit cho iOS 7 th ng dng ch chy c trn iOS 7, nu bn vit cho iOS 6 th ng dng ch chy c trn iOS 6. Cu hi
403

t ra l liu c th vit ng dng c th chy trn iOS 7 ln iOS 6 hay khng, ch c th mi tip cn c nhiu ngi dng ? Cu tr li l c. Bn c th tham kho thm v vic h tr iOS 6 v iOS 7 ti y. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/ TransitionGuide/index.html#//apple_ref/doc/uid/TP40013174 Cng vi ng dng minh ha trong phn trn, bn chn Assistant Editor ( )

chia i Editor area cho d quan st. Trong menu ca Assistant Editor, bn chn Preview > chn Storyboard xem giao din ng dng trn khung Editor va mi m ra.

Hnh 8.13 Chn Preview > Storyboard Ti ca s giao din mi ny, bn chn xem vi ch iOS 7 and Later. Nh vy l bn c th xem c giao din ca ng dng ch iOS 6 v iOS 7 cng lc. Lc ny bn c th thit k giao din v tinh chnh sao cho n nh v giao din ca iOS 6 ln iOS 7.

404

Hnh 8.14 Xem giao din vi ch iOS 7.0 and Later Trong project, bn nh du vo Use Autolayout ng dng t ng nhn din phin bn iOS v s cho ra giao din tng thch vi tng phin bn.

Hnh 8.15 Chn Use Autolayout

405

Giao din khi chy bng iOS Simulator vi iOS 7.

Hnh 8.16 Giao din khi chy bng iOS Simulator vi iOS 7 Giao din khi chy bng iOS Simulator vi iOS 6.1

Hnh 8.17 Giao din khi chy bng iOS Simulator vi iOS 6.1

406

CU HI THNG GP T hc lp trnh iPhone c c khng? Bn c th t hc lp trnh iPhone, tuy nhin thi gian s lu hn v i hi bn phi kin nhn, tm hiu nhiu t cc ti liu, video, internet. Ngi cha bit g v lp trnh c hc vit ng dng iPhone c khng? Bn cha bit g v lp trnh vn c th hc vit ng dng cho iPhone nh bao ngi khc ch cn bn c am m, sing nng hc v thc hnh, tm hiu ti liu. Tuy nhin nu c kin thc c bn v lp trnh bn s tip thu ni dung nhanh hn Khng c iPhone c hc lp trnh iPhone c khng? Khng c iPhone th bn vn c th hc lp trnh iPhone bnh thng, ng dng bn xy dng c c th chy th trn cng c gi lp iPhone m Apple cung cp km theo Xcode l iOS Simulator, tuy nhin iOS Simulator vn cn mt s hn ch m ch c iPhone tht mi c nh camera. Tuy nhin bn c th tm mua iPhone c chy iOS 6 hc lp trnh, gi tng i r. Khng c my Mac c th lp trnh iPhone hay khng? Bn c th lp trnh iPhone m khng cn ti my Mac. Bn c th xem Chng 1, phn 1.1. S dng h iu hnh Windows, lm sao ci c Xcode lp trnh iPhone? Bn c th ci Mac OS ln my o ri ci t Xcode bnh thng. Nh vy bn c th lp trnh iPhone trn Window ri. Bn c th xem thm ti Chng 1, phn 1.1. Ngn ng no c dng vit ng dng iPhone? ng dng iPhone thng c vit bng cc ngn ng nh Objective-C, C++, C hoc Java tuy nhin ngn ng Objective-C vn l ngn ng chnh c s dng nhiu nht.

S dng cng c g vit ng dng iPhone? vit ng dng iPhone, bn s dng cng c Xcode do chnh Apple cung cp. ng dng ny c ti min ph t App Store ca Mac OS. Bn xem thm ti Chng 1, phn 1.2. Mun hc v lp trnh iOS phi bt u t u? Mun hc lp trnh iOS, trc ht bn phi chun b c h iu hnh Mac OS, phn mm Xcode (xem Chng 1). Tip theo bn tm hiu cch s dng Xcode (xem Chng 2), tm hiu Objective-C (xem Chng 3). Sau khi chun b xong, bn tm hiu cc i tng trong Xcode (xem Chng 4, Chng 5) v tm hiu thm cc ti liu, video, website c cung cp Ph lc. Sau khi tri qua qu trnh ny, bn c c lng kin thc tng i tip tc tm hiu su hn. Nn c ti liu g khi bt u tm hiu lp trnh iOS? Khi bt u tm hiu lp trnh iOS, bn nn c trc ti liu do Apple cung cp ti https://developer.apple.com/library/ios/documentation/ nm c mt s kin thc c bn. Ngoi ra bn cng nn tm hiu cc ti liu, video, website c cung cp trong phn Ph Lc. Xcode l g? Xcode l phn mm Apple cung cp dng lp trnh ng dng iPhone. Bn xem ti Chng 1, phn 1.2. Objective-C l g? Objective-C l ngn ng c pht trin da trn ngn ng C. Ngn ng Objective-C c s dng l ngn ng chnh trong lp trnh ng dng iPhone. Bn xem thm ti Chng 3. C th s dng Xcode 5 vit ng dng cho cc phin bn iOS c hay khng?
408

Bn vn c th s dng Xcode 5 vit ng dng cho cc phin bn iOS c. Xem ti Chng 8, phn 8.1. Lm sao ng dng c th va chy c iOS 7 va chy c iOS c? Xcode 5 h tr c ch t ng hin th giao din theo phin bn iOS cho ng dng, nu ng dng chy trn iOS 7 s c giao din khc, chy trn iOS 6 s c giao din khc. Xem ti Chng 8, phn 8.2. Lm th no a ng dng mi lp trnh ln iPhone? Nu iPhone ca bn jailbreak, bn c th a ng dng ln iPhone dng JaillCoder, xem Chng 7. Nu iPhone cha jailbreak, bn cn c ti khon Apple Developer, xem thm ti: https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistribution Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40012582-CH1-SW1 . Lm sao chia s ng dng mi lp trnh cho ngi khc? Nu ngi bn mun chia s ng dng c iPhone jailbreak, bn c th dng JailCoder a ng dng ln iPhone. Nu bn c ti khon Developer ID bn c th chuyn ng dng sang dng .ipa ri chia s. Lm th no a ng dng ln App Store? a ng dng ln App Store, bn cn c mt ti khon Apple Developer vi mc ph 99$/nm. Bn c th xem thm hng dn ti https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistribution Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40012582-CH1-SW1 Developer ID l g? C nhng loi Developer ID no? Apple Developer ID l ti khon dnh cho cc lp trnh vin ca Apple. Vi ti khon ny, bn c th a ng dng ln App Store, chy ng dng ln iPhone m khng cn JailCoder, hn na bn s c cung cp trc cc thng tin t Apple nh cc bn
409

th nghim Xcode, th nghim iOS mi Apple Developer ID dnh cho iOS c 3 loi chnh: iOS Developer Program dnh cho cc lp trnh vin vi 99$/nm, iOS Developer Enterprise Program dnh cho cc doanh nghip vi 299$/nm, iOS Developer University Program dnh cho cc trng a lp trnh iOS vo ging dy v c min ph. Bn c th tm hiu thm ti https://developer.apple.com/programs/

410

PH LC Source Km Theo Ti Liu https://www.mediafire.com/folder/pulecvu1ic48t/ Sch Bn Nn c 1. Apress, Learn Objective-C on the Mac For OS X and iOS 2nd. 2. Aaron Hillegass , Objective-C Programming: The Big Nerd Ranch Guide. 3. Apress, iPhone and iPad Apps for Absolute Beginners 3rd. 4. OReilly , Head First iPhone & iPad Development. 5. OReilly , iPhone App Development: The missing manual. 6. Neal Goldstein & Dave Wilson, iOS 6 Application Development For Dummies. 7. Neal Goldstein , iPhone Application Development For Dummies.

Video Bn Nn Xem 1. http://www.youtube.com/user/MilmersXcode 2. http://www.youtube.com/playlist?list=PLA138EFCAFA592E7E 3. http://www.youtube.com/user/ChupaMobile 4. http://www.youtube.com/user/CarnegieMellonU?feature=watch 5. http://www.youtube.com/user/CodeWithChris 6. http://www.youtube.com/user/iThanhVN 7. https://itunes.apple.com/vn/course/developing-ios-7-apps-for/id733644550 8. https://itunes.apple.com/vn/course/iphone-applicationprogramming/id727587146

Website Tin ch 1. http://geekylemon.com/

2. http://www.appcoda.com/tutorials/ 3. https://www.udemy.com/blog/how-to-build-an-iphone-app-from-scratch-fornon-technical-people/ 4. http://www.idev101.com/learn/ 5. http://www.mobioneer.com/6-iphone-app-development-tutorial.html/ 6. http://nhatnghe.com/forum/forumdisplay.php?f=154 7. http://codewithchris.com/ 8. http://www.chupamobile.com/tutorial-ios 9. http://www.iphoneapptuts.com/ 10. http://www.facebook.com/LapTrinhiOS 11. http://iosclass.blogspot.in/

412

You might also like