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

MC LC

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 (

): qun l cc thng bo li, cnh bo ca ng dng.

- Debug Navigator(

): theo di qu trnh debug ng dng.

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.

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 (

): dng chy th ng dng.

- Stop button (

): dng dng vic chy th ng dng.

- Scheme menu (

): dng la chn iOS Simulator

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).

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 (

): dng n/hin cc vng Navigator area, Utility

area, Debug area.

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 (

) 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
ca i tng.
Trong Library selector bar, c mt s button quan trng l Code snippets (
Objects (

),

). 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

Tn kiu

S nh

Min gi tr

K t

char

1 byte

-128 .. 127

unsigned char

1 byte

0 .. 255

int

4 bytes

- 2147483648 .. 2147483647

unsigned int

4 bytes

0 .. 4294967295

short

2 bytes

-32768 .. 32767

unsigned short

2 bytes

0 .. 65535

long

4 bytes

-2147483648 .. 2147483647

unsigned long

4 bytes

0 .. 4294967295

long long

8 bytes

-9,223,372,036,854,775,808 ..

S nguyn

50

9,223,372,036,854,775,807

S thc

Logic

unsigned long long

8 bytes

0 .. 18,446,744,073,709,551,615

float

4 bytes

0 .. 3.4028235e+38

double

8 bytes

0 .. 1.7976931E+308

Long double

16 bytes

0 .. 1.1897315E+509

BOOL

1 bytes

0, 1; True, False; Yes, No

Bng 3.1 Kiu d liu trong Objectived-C


3.4 PHP TON
Php ton

K hiu

V d

Cng

A+B

Tr

AB

Nhn

A*B

Chia

A/B

Ly phn d

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

V d

Cc k t cn in

LacHong University

Cc k t c bit bt u bi du \

\n

: xung dng;

\t

: k t Tab;

\\

: k t \

\;

: k t ;

: du

Cc m nh dng gi tr ca biu thc

%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

Tn file m rng
.tiff, .tif
.jpg, .jpeg
.gif
.png
.bmp, .bmpf
.ico
.cur
.xbm

5.4.3 V D
Hin th nh t mt file c sn trn my.
Bc 1: Add UIImageView vo StoryBoard.
Chn Main.storyboard

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

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

5.5.3 V D
Hin th AlerView dng thng bo.

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

163

Hnh 6.10 Giao din nhp m


VIN

Hnh 6.11 Giao din


camera

Hnh 6.12 Giao din x l hnh


nh

Bc 1: To project mi.

Hnh 6.14 To project


Chn Single View Application.

164

Hnh 6.13 Giao din kt qu

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.161 Giao din bn .

Hnh 6.159 Giao din tm

Hnh 6.160 Giao din kt qu

kim

tm kim

Hnh 6.162 Giao din thng

Hnh 6.163 Giao din duyt

tin chi tit ca ni tm kim

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