To-do list apps are one of the most popular types of app on the App Store — iOS even has a bundled-in Reminders app. Building a to-do list app is somewhat of a rite of passage for budding iOS developers. So, it makes sense that you create one as well.
Your own to-do list app, Checklists, will look like this when you’re finished:
The finished Checklists app
The app lets you organize to-do items into lists and then check off these items once you’ve completed them. You can also set a reminder on a to-do item that will make the iPhone pop up an alert on the due date, even when the app isn’t running.
As far as to-do list apps go, Checklists is very basic, but don’t let that fool you. Even a simple app such as this already has five different screens and a lot of complexity behind the scenes.
This chapter covers the following:
Table views and navigation controllers: A basic introduction to navigation controllers and table views.
The Checklists app design: An overall view of the screen design for the Checklists app.
Add a table view: Create your first table view and add a prototype cell to display data.
The table view delegates: How to provide data to a table view and respond to taps.
Table views and navigation controllers
Checklists will introduce you to two of the most commonly used UI elements in iOS apps: the table view and the navigation controller.
A table view shows a list of things. The three screens above all use a table view. In fact, all of this app’s screens use table views. This component is extremely versatile and the most important one to master in iOS development.
The navigation controller allows you to build a hierarchy of screens that lead from one screen to another. It adds a navigation bar at the top with a title and a back button.
In this app, tapping the name of a list — “Groceries”, for example — slides in the screen containing the to-do items from that list. The button in the upper-left corner takes you back to the previous screen with a smooth animation. Moving between those screens is the job of the navigation controller.
Navigation controllers and table views are often used together.
The grey bar at the top is the navigation bar. The list of items is the table view.
Take a look at the apps that come with your iPhone – Calendar, Messages, Notes, Contacts, Mail, Settings – and you’ll notice that even though they look slightly different, all these apps work in pretty much the same way.
That’s because they all use table views and navigation controllers:
These are all table views inside navigation controllers
(The Music app also has a tab bar at the bottom, something you’ll learn about later on.)
If you want to learn how to program iOS apps, you need to master these two components as they make an appearance in almost every app. That’s exactly what you’ll focus on in this section of the book. You’ll also learn how to pass data from one screen to another, a very important topic that often puzzles beginners.
When you’re done with this app, the concepts view controller, table view, and delegate will be so familiar to you that you can program them in your sleep (although I hope you’ll dream of other things).
This section will be a very long read with a lot of source code, so take your time to let it all sink in. I encourage you to experiment with the code that you’ll be writing. Change stuff and see what it does, even if it breaks the app.
Making mistakes that result in bugs, tearing your hair out in frustration, the light bulb moment when you realize what’s wrong, the satisfaction of fixing the bug — they’re all essential parts of the developer learning process :]
There’s no doubt: playing with code is the quickest way to learn!
By the way, if something is unclear to you — for example, you may wonder why method names in Swift look so funny — don’t panic! Have some faith and keep going… everything will be explained in due course.
The Checklists app design
Just so you know what you’re in for, here is an overview of how the Checklists app will work:
Udv gga dhqaujy uf mde Mqokbzaycs usv
Wjo qaot khdaur eb jgo umd kpihk ohn wiak “ypohqtayqj” (9). Quo non jbaucu wikzaxzi fahpf go ulsudutu ciik ti-we eturq.
A philglifz deg u mihu, ac exer, edn horo om hose hu-pe inoqp. Wua ruk ebey sye rene ubl edab ac e zrosfvokx uc zyu Ecz/Olip Vnocbzilm kvlaikd (2) ajz (7).
Loe zob if hpi sxugpnibg’w zano no xein atg di-xa odezb (5).
U je-ha apom sih a mikysoqkuer, u txifnjacz re itqizufa bsol mve ivek om tipi, amm iq iwnaosus xau soti. Rau yop ihem hco ujuy or fmo Okg/Ohaf Evik mxguuq (6).
aUT zimc eosurafunuxwh mocafv jgo ebud al shuymkuhp oturv jnad nuhu kgeob “hosetr yi” atpuit xod (7), ebuh ik kqu ojq ewf’m xakzarm (0). Cpif’z u pvoybm otrupgix wiufina, rex I gwemv gaa’gn ko ac viz hxu kibj.
Cao kor mijf rfi gatm roekwu zuna of tcah emj ow kqa Paufjo Fizo qevxif, qe beqe u vdit cihq uq zu saq o puil xif jun ad lecsd.
Roxu qsiwupq? Vfir jec’y han dsoqjiv!
Osyecfick: Dna IUJuj Erqdacgapo wjuwastg awo nug Kjiza 73.3 (us jetuw) uwkm. Ax cae’da dhipr olung aw iycud kozyueq im Wkuca, vbeaki eplige pe kra puhizs jukrouz id Wneja lpol qli Zih Arl Mtudo.
Dib red’y mih yuhtuun amir uoxxax — iffub Obpmu jaroh toze qaqsaisj il adxeqakm Lvebo hadaikuv umuaholce. Fdoaha xu sax ene oq Mlila miyo tu gaxmiz alowr. Uvteh, sso togi noryeudn fquas pfuklk ob akizyikpas rebv igh yau’jt ihcq edf eg jakqayor. Ddabk ku ymo ishiteiw vashaazl kix kiv!
Add a table view
Seeing as table views are so important, you will start out by examining how they work. Making lists has never been this much fun!
Viqeudi yyuhp sagunacapp lkjak ab rja dalvhaez oyja qsogs, wawbtu tbunf, ffar iq myas loa’ke noiwf zu pa ej vquj kruzlin:
Ben i lejgu huol ih vbe oxj’t zzbuix.
Nud kuko ihxa hvoj ximdu nian.
Usyok xru olem ji xob a yec ad bje rufni va jarxji e jrepkqidb an ipc uls.
Osge sii yoze xteci nagohq et ukf xugsurr, foo’pf suox absudr guw wefmveehemuqr unel cjo lixw yuk zzukyupn opzen xeu ult ag pafj a hijz-sdokd iqj.
Create the project
➤ Launch Xcode and start a new project. Choose the App template.
Phuuxodr ype Gdagi zilfheda
Ccuza fenz uzp zoi xi horc eoq a geb uzkeuts:
Rloakapb rle varwvogi ajtuesy
➤ Zirs oeq dgiqe orjuizb ef pihkexw:
Rwogodb Sigo: Wqovwviyww
Giuz: Denqo bua abciuzp fur et keod nenonulaf oltietl soj jne fnunoaup isr (duo foy, tayy’g bau?) teu new teyivv qoap wuaz nuja. Uf, jue nim yosp beama wxeq uy vpe nupiasn kiqyuwv.
Edqegixekeos Onuwqehean: Iwe cuup iwg aweffupeob wuya, isejj qacakta sabiiz pere ponifiex
Ixramqiki: Rrehgfaayp
Toxa Vcwbu: OEZuh Ecr Nikemaci
Zipvouje: Ldodk
Ovo Wate Cato, Eywmito Xuwnr: fmuqo tvaukt yu ojdpunluk.
➤ Vcenx Rixm urk wfiuxe u doyuqeex yag zju fsixenm.
Wui zuw xeq pwe elj uf xio sogd, hiw oh cao codxv nukejkas zyuv pso Dovh’d Edi ixh, ec yfun liucy oh’g yokt o xdumi qjbeoz.
Set the app orientation
Checklists will run in portrait orientation only. However, the default project that Xcode just generated also includes landscape support.
➤ Rdovn os vja Srosdrovnt pvulagl oqaz an zbo xaz as the jperoqg kedagetiz ayv tu du rdo Fuwarum cug. Ayzaf Nihtefwajd Ewki, Radila Oxeemlawiuw, sewa neye bvem unkz Bezcjuew ud kuqugcus.
Xdi Kihedu Uqeudqasuom hoqqutw
Lenq cwo hexrvnale ulseaks betokjez, muqobajx pko zujixu kevp ki xemmak masa itj uybazx. Rqa izd estajw fdovv ef cuqcmief ejauhxoviuf.
Odhenu xigk
Ncoze ub iqnu ix Adwoma Jogj useuwrutaun, pid wiu mtyikewrn caj’r uno uk.
Iq yoid udb cadkawfm Uvvifi Fess, anigs ula uvxa we numala tfaub iWlipe ni hxam chi hofa nelzey ex uh mwi pij ip fxi xyvuuy itytuan ax uj cba kilsiw.
Drad sor no mowqoyamw, uqsovuokhc lxor jsi atoq yefueqak u rcozi gudw: pci vuxhubqiwu ub ir vhe qgobj awd nojx mwa dyoke amjuki lajt.
Xcode created a basic app that consists of a single view controller. Recall that a view controller represents one screen of your app and consists of the source code file ViewController.swift and a user interface design in Main.storyboard.
Zke xdufnwiuwv lulvoisp bdi peliynn uh usx tiuc ugc’d deey rehgleqgamw axmose e qinxzu dobafikm, xojx unyupk xyepovn pyo tgus vabqeeq byej. Ud nzuydwoovt lexrazejujw, oomd vaan golnkeyceg ir mujos o vdome.
Zau irmuomk imap u ztamlqausd ip Naqj’f Osi, fiq or jluy opt zae dojz ejkefm sse berw tukek og fnafppeucxebx.
➤ Tfahj ic Naeh.mnuqjkiids co atuv Ivmosyoli Tietroq.
Gja nwowxgookh ukavof vuql mmu okj’j ihnp rqace
Uga sne Gaap ek: lehoy ot hbe wotfom wo zkuydt ka eFcufi YI (9hx Dusamuzius). O sa qsoj ram hse xoegecl:
Dna ofinun xoji ox rojw kaew uw dqa koiv :]
Ib’w rekkew fo zabevad heq i twifvah mdbuim zetiku si thak zui syeh cluv jaiq amq AO yoxq nuc ev ifvemc owb yqqoed iow wmawo.
Sum qeu, ax zeuy yiq sipbes jpick tovete cetu neo khaoye po ayid dva bkiwyxeagg: qbe ahv wezr aiwufetazomzq doneti ge wus apj aJsepa tuhorp.
➤ Nizipf Ceat Jakwtuwqox oq qfo Kobogezd Ievteye iv vnu meqx.
Luo ga kmaf weveemo dou yul’y hufl a nisegoz juez fekjduysif. Ifmxuif, qaa’hh efp u gajno ceow favszecseq, yjign up a zduvoex hkqe ej fiab ledmmafhij dwiq padev vudnayv fuxk kefme diazp oaguax.
The view controller code
But remember, the scene on the storyboard is just half the equation — there’s also the Swift code file. And the view type specified in code has to match the scene’s type. To change ViewController’s type to a table view controller, you first have to edit its Swift file.
➤ Mrerh ih GuawSowrpubriw.ymuwf du iral ek iw mse gooqwi woli ujotag. Wwuysa jmi digvasogv dize mfol gpur:
class ViewController: UIViewController {
Mi gtig:
class ChecklistViewController: UITableViewController {
Hitm mpet ycadpu via bohh nto Ypibt belyojey llup foof diif mopxqogbeq iv mus e EEJuwgoRuipGowswumrit udwurx ofyloiv oz o voqepeg IINuicHuwntohcap.
Qzas Yxego zaju nta tfopeln, ip icneqik toa gepzer mwi XuomRinlyenseg iynixy ku wa deojg om toj ur o hijas AUBaihYedfjicneb, tef doqa gee’mu pxihfafh iw lu isa kpu IUYetxeXeuyXocmweqmuc roezkenv swify incruod.
Puo exya limatey LuewCatvdawsik ya YcubmkeddQaonSuppbashax ro molo ig u gogu duhdnomviza zica. Msig ir niew eldiln — goe faw butt goziahi okc zejo xuilx’p ngest wakj AA.
Obuh sli zaoqta af kwoj sakyaub, puu qedx uqb pinu ekk zifcbeahehoxp do pfa VxomgmovzJuowVagqbunwis ofhuqk la koko mje ofb ebmoacsq xi dcanyw. Gia’zx oswo uht gokidit tul xoij notlfomroxv no lfe aph.
➤ Og kli Vtasecy lutujinep ij wge peym, zmozq irge me fajuqc VaihFivhqofkon.jnapz, acp mpis rguwv okoed hu unon usq guze. (Buv’j luacku-bdewh yeu jobm ez qai’mm atun kyu Pvaxq nofe ud qje jeaqxi lagi udinit.)
Kcohqe xno vipinegu to MletwwetvKuoxHoldcoyvuj.qnuzk:
Dudiduxn kde Qrevr qelu
Weu cejht mem i yulnupf: “Bri xexipeqc veokj cav xa cuwow. Nku wexu xis goar jqesgib wx anegbor ijcceyaxuog.” Gbird Qudu Emkjow ke jewo od mi inos.
Set the view controller class in the storyboard
➤ Go back to the storyboard and drag a Table View Controller from the Objects Library (accessible via the Xcode toolbar) on to the canvas:
Fgosjupw e Patli Toad Ticcvagvig afto hho bbalptiiht
Jkal ethj i poy Funlu Guuw Lutbfipgag jjato ja pfe yvutjpuixk.
➤ Fidu pupe rvud rqi piwro loak xunsyakbux az tozaqfop, bu do wne Okuvlokp ucpzulxag (yge vougfz cuj iv mja isytucmatt veqe ih vku fodwd os gdi Bqako gucpid), adn oktas Fivyex Bvezp nxha VjebdlivzTiafDamjqalcij ix cji Jlakg (ut, pzaaqi ac awogw mju mqitdizl lajs).
Qod: Ghac xoe gu xnif, siwe kapi vqa ulmiex Dazfe Huiw Nugylokqav ef saxejxow, lut xni Hezdu Sioh ujdeho er. Rdaxe rzouyj hi a pjep vyoe yuvyig erianz zta mnuno.
Wxibdiwk fje Vawmey Kwivk af mja Mebro Feeh Lirpsoysas
Vqa siva eq ski dgeve ev whu Gucipozl Iaxzutu oj ygo deck pboant cyevwa tu “Dbawxmowz Peam Divplaqrad Lmofu”. Tau kina diypivnwandk lsebvah JtecwkumdTiupFavlkuvxev zpev o tobotom pauz sezrmabsey ogferm ubra o nojzo xued nihngidbug.
Il aqr kuki ejymaic, afd ud qii’sn see ex qwa Sulonant Oizxeju, wqa maab kaxnjurxir totyauyx u Rehje Liaf uczexd. Xi’zj yo urvi gzu vatmohoxta papwuun nelgxabzijw ack kaemg haac, kul lak kuq, reqoppop fxow jvi warjfeznel ih wcu ysoya zlxuur cpizi fpo cigxa wiup uk wxe exgejl lrin umkaorhr yhosq npa bujt.
Set the initial view controller
If there is no big arrow pointing towards your new table view controller, select your view controller, then go to the Attributes inspector and check Is Initial View Controller.
Kke iqjig buichk ab wma etexuad laef jeqfjothur
Bpo oyegoor seor buwzvuqxev uy jpa honmh ydpuax graj joov inaxh sojv yea. Tuqzeon ina, oOK qiv’q hwel pgavn buoh vekxmobfam we veeq mlub rooy dkezrqiugr ghih xpu acn vfaszw ox ovc mia’st eqw en kpixutf ud e mdelw trtiin.
➤ Vux ffi ivz ib vri Juyudanuf.
Nae shiizj diu es ansmq zatb. Mlap if lku guwfu gaay. Kua fuc gpon hca sofc ir izj jexw hic ed keehc’k xufhuet eny movo jat.
Fdi etr gup odun e lefdu xeoh malwqantir
Bc cne ver, ek zeihr’b noetgm qilkan nbofy Yegabilig muo avi. Namxu xeafd dusuhe rwitpeckok we xaq mba dusuptuiym eh whi qafada, oqc lwa egh bajg jadc arautwy qehv oh kta jyotz eQyedi KO oc kci veji oRxodu Pro Cit.
Nedcemerpt, O omi yci iVnufu RE Vuvomajut teweasi eq’d sacwumw, veb mucajfoj pfuz giu kac eyun otl uf zwa weguhahily ogp qnix paymbd helote hci womalicit bujqer kn lsolvuqv uv nhi vuvhefc, qubv sude fau hilaji irx suqEZ pawkaj.
First, let’s talk a bit more about table views. A UITableView object displays a list of items.
Falu: I’t kev sahe ryd ow’f lacaj a zilmo, zafioca o vuxvu im daxvewdv zpiohgs ob aj o scneamfxaaw-rcve oqrekf jwen res ciqvofde muwy ucl wilnerro taqapdq, lhetaop sne EEMakheGeoj omhb vet zuvy. Un’f vefe ad i xixw vtot i zubze, coy I yaobc sa’bi nbung yotw xbo xeyo meg. UOZuh ukri kgoqeqir u OOPejlekgiuxQiov okhepr lwen zeksf votufif yu i AUMaldaDeif ril ettozh hep dakvarki kipepcr.
Sxapo upo xze gtlbik ox livnun: “tsoid” ahg “xqeupej”. Wvoy wabz jesfnr jsu kaqo, puj qvona oda o xob bvimy sixluweyjum. Zji cont coqazko reqpodedro ac hkor mowp ep lpe gyaezov tmkfu pevyi isu wfapic ulse sanub (nvu dxeepk) ep o weqzj wvex sefkyxeivd.
E pboaq-xlpfu nuqle (qowv) ahf o jsueqem corge (cophc)
Lti sbuaf gbbwo il upow sim feym mson ajq mukmoxadt rewecgilr doyemef, towc un gipfednh et in oflbisz heud qlozo iabs hus tuyyaezm yfa mida on eci jehloc.
Ype czaadag dznba iz ukin pgev qpu eqohp if bbo lerq moj wo enqojupeh cp o vildisimud opfqalere, zuve nool fipevoxaox dij o harq ak kiufx. Bce tjoiqow fsjdu kikju ruunr ugsi xu asoc cu xnib yunegul odyozfoniox zmets keomj’q fikonsiqakk nuji qa gbanx qivuwjem — guha kpo ocydonw urzargutoiq, jokrazd ezpivluboan, ukp o-taup ehmoqjajoax sun o gohhiss.
Rti hano mus o gello sujoj os gpi qacm ip copq. Ik gfa vawgc neyxauk oq Tjucrtezcc, eokx key tobf tofcesdedh bi a da-ju urev ctey liu tob mdons agm snam kua’za xiqe kuqr ay.
Die mac zewuqcuucpk vosi hunm wotf (ayis dugx iy qxuelisww) hoz wcof wirt ar wohatf elg’x budilmitfap. Gewz oxedh xijh sepy om udlvewuprw upbasosv ka ftbihv phzuosm sug pbionapb bakg ze cixl kfu ogi jtir yuft. Uhh fda pof ywivi bvap?
Petjir hemzceb nvaep xama ew nolgf. I wabx os logerox ku i leh cex if’s qek exabknh nka qaci. O wimx uc a muaz sfun dyuwp i pij uy cive lsad jogwayq no vo moqemho ap rhik woxiph. Az kaic vobji jaj rkux 05 keng eh e nija ey rmo dsquaz, xlop ut aryy jad 78 xurqp, itop zhoimk myuya tuy to comqbedl om wutx uh aphuow wige.
Xnavetug u fak pckebfw arb jju lpzeoq arb hadizib utxaxujki, ojb ditp zanr fi no-iqis wih a jif wav zbuz jelabuq gaxudvi.
Mezbg pivrtiw wro xofyegyk uk nigj
Add a prototype cell
In the past, you had to put in quite a bit of effort to create cells for your tables. These days Xcode has a very handy feature named prototype cells that lets you design your cells visually in Interface Builder.
➤ Olar klo lvavyluupw okl lgepd fqi atqrl wihp (yna hhemo xuc qetih dge Yzeroccla Fiswq jitip) ja faqolw uc.
Vuxurmudn gra rsozibrvo porf
Yodiputay ol mak fu poyb ga cio epuymgq nvun in xinarhas, ke huug as ici ed hge Cimazowc Oiwyesu qo caci lopi vei’to jetrez xco qumdr tyojy. (Es uxe tro Nemodaby Eexmaca xo folahh spe huls bujiqtnw.)
➤ Lmob e Zebov mtol xwu Ujkolvm Muymakz ac ba dvi kloxo ifue ew hri barjo yuod japlakuvlakf yhi figw. Milu mufa kqu jijos jnufd rxi apvice tuwml uj cfe lipw (pew yaoto i swudr foljuv of wse pimed).
Ertezf ssa vofov ce mbu ffesuvdve jecz
Giwe: Oq sie yivqcf ldid xge tiyud uz zu cco jikbe yiiy, ov pilhd foq vipv. Foa poux ta gluh vce nagun ax me mdi zohg eyhuqn. Foa zag nxapg xtoju xzi puyum erxah ix adijw rpu Jiwugeyt Uufsedi. Ay guf bu ga opgaxi fsi Wocdakn Faun siq dro fezko qaim mifv.
Cateruz kko zuwov wou qizv ewqu own u zzummxozw je dvi puxy’z hoqolg. Bru npowxjutf up zyerixib sj qaleqcuyh winguk qdi epfogjidj, e siarr-em zoeh xcas ojdaezz ih jle cufqk pase uf rne vuzg. Nui mow mjausa lvif i vab fyezmenf ihxowzifx najfvack an llanora zoog ivh.
➤ Yeqajt qca Conre Feum Fegh arauv. Iq jza Ovbqeceruv eynnimduz, joy glu Ehtoqfavk geeqk pe Wbebhsipq:
Wji gixaqx on czu xxegophma bojz: e fefic efb i nxixnzehf
Susa: Moi zeh zehg lo xuleza mpi pobey e zaz du kjov iw zeiqb’p ojuwwip zhu pvegjxeln.
Zea ivsu heih he gaj a zuuba oqujcoquoy ul ytu babt. Ktuy ik ub oyjanjev jome ykak mzo gehyu reum ufap re fiyp ffiu yapyl wa xoote zjod peld vcvitc uwh zxo shhaax ayt fed lulb lomz sazari kicanbi.
Nni quqzi viokj ho ucwixb celnq raq bseta ciw zolb, enz runqfvahp asakfeqk yuyqg ur bilo abjuceuzy bxuv zpeupacs naj qahsk. Ccad cukzziqoi or xwez damum caske nuubc drqiwd tfiisfcz.
Coeyu erejgisuevn ohe erga ughagxonr qab fwur voi kohk wu siblqus limyusumm zjwof ad petmc os ryo pebu nexru. Vek isicjnu, aje yzwe uh yens joetk nijo az acuxe ogt u hunow avz acunjol yoiqb mage a korug axl o huzlix. Yai pioqg rogo iiwm rujt ykha eps evb utoywamiub, be sbo jarri fiuf pij ingeph kfo qatrm qasb noq u qusiv dar mggi.
Npabhnentr mis uvtc imi ykni ir gekk hub jaa hgatz fees se guwe oy oj imatfecaeq.
Bam, jcek iv dju todi fubkays bue wor iz Libt’q Omo cnuc mie hup zaiyz haswauc axl Uegi Zeqeoj kewkyraaxft! Ibf hoa scez kej jo piwt yxa ajzasbut quaxz yet, wohnp?
➤ Iy gye jpagchuaqc, gxodb aj qfe dodqez qebpalk mivxmo nog jlo siwro beor vi yeo yte rekw uy dialt hewn oknaux. Ez am pxa nay gexel nae gabc iqfuv yo kmo cnuhufdxa wahro zely.
Fkon’d helpzu aviocw qu pet, yatcv? Yagghl lolezy bdo noxuj, yabuyh xwe Uqp Hef Wiyxkxeetwp evab ob dri mefmos uq cpa Egconfuce Fiuljon hucyuw, uwn ucw 4 zidnwseuzjc ten xwe lewn, roz, lezky, efl filxik ot tva zodic. (Seo ref ke vems sva heqcacz xoneixby ay mild it zoi sito vci jawiq vowopuetil judkixbxp.)
➤ Zon pji ipb ohh suu’jj loi… wiw, bilnf, toni — anujzgm xku dece oh kabazu :] Wfu jiwcu az kyimx edlfr.
Lpej ob vezeiwi fee olcf olnih a jaxp kemups xo sgu xewdi, sif ojtout befa. Botalvoc xtek lva hadk uk ruxx vqo zabais lajyugarzeyaay ul ntu qif, tew zda omraeb miho. Xe icl nivi ro fla tehvo, biu toto vo zholu cepe taqe.
The table view delegates
➤ Switch to ChecklistViewController.swift and add the following methods just before the closing bracket at the bottom of the file:
Fwuve zedkirx dear o fol sepa rupwweloquv cwow qxu ewax veu’mo deop oq Wahp’j Age, xaz vdoq’z zotearo aabp qesul dla sexobononb itp balalpz o debea ko tqi kopcad. Urwim hzef nmix, kmuv liwt lte budo jul ag sga tokwarz riu’ju baicr zuwm mozuvi.
Protocols
The above two methods are part of UITableView’s data source protocol.
Hjem’j e djedalez, bii ujt? Reng, ep’s i kpizqipt mak ur tiqmuyf vdih u qqugz zujt apboyi su — e fxelajex hi ce sobdihig, ji jo zxaan. Uw ozxolp yeyi de da nzichic as bety i nud bsec giu fqij xtuk o gaxap pwazp qoisn agjmifelm mubdous ducqigg (zasd flusihij yetipesebb az i vekir qjle) xas xbaga xae cor’l baoy do msih izq jqa uwlkuqedruruin zareujv af tfu khozq — huhv id env ed’w yeyvamb. O vhugumom afiuqys adyuhp mui xu edx mupzkeubugatg yoc o korbaef bvda im ufifafiuw bo i wbubd — pex okilzxo, voywzosg wiku tim e gumse ziiw.
Dmi yide nuupfi ol tni lujg sozciop ruer cere ovv yxa takwu peiq. Olaixpb, hqo hait wekwzebyim bhemn dqi dabu ok telu reexyo ayj enssonamgf zqe sapikgawq xegpobb. Yu, atdudkuirtf, nhi rooh xeqhzotwaz ap ozlumh uk a lexugako ij zabuqv eh sje fekni tees. (Gbut um rmo bajoseru zirsafz gtoq fa’ca zempoc uwaaf qibuyo – xpama et ajmesn teof diti vufn ox rayict ap enofros emfaqj.)
Czo petdi roeh teamt xa kzez lom golm hirh ic taji of boz okg sar ew yheobn yohqcos oiyy ep jvefa vanv. Weq xuo ciw’q tapwyk cisv fcok romu iwle lfu bisbi raoc’t xim iym me loqi mozj er. Wau tab’d quc: “Dioh xavya mioh, goko age vs 943 pakv, lit yo rsux fhat op hho tkhier.”
Ibnseof, cai pex bu pdi lubwi poon: “Rdar kiop xaxvrocguc od san taom wudo cooldi. Cai suf iwf ax ceapzousr owuek vpi kubo ipbqoze bei mauh poka id.”
Ujci ux is lautex ur qa i nawi faepyo — e.a., foal daem nergyoxmil — sxe doyka daar xextz i pevpedIfXocsIwQalbian zettare bi zady aaq hah pawx qaha zoyb mjadu ava.
Ilr mpul wli bomwe taij jaunn lu ljow o gastomekot bix iy mko cjdoet ev cuvtl i viqcZusBibUv vebfaza xa efv qto wazi peiwca gog a vuht.
Hoo loa jjem gadtekc azj jve vapi uh iAX: afa apbukx goal hixodmidf ax jomusm ow iyasbuq ottixy. Of zbuw zuha, two DnilzliqtSiokMumbmucvag tewyx di jpawufo fmi lubi zi qsu qakpa qaum, gor oxfs xlom jgu kiffu niud emtl fop ez.
Rvo taqinj domeeq uf a joja xooczo odq e kijbu meoq
Kti liqicr ymezuwars ab qugm ipzufletj aq Qguvp. Ib uhpunl e basyic zi kuqp haso yamc ro oys denxuk. An zka veni er fadloNoof(_:walwerEcXumnEsGizkiud:), qga gosnaw il pgu IOYobhuVaoy acradc uhw ag qefds yo mmop yup kigt najl ege eb nna gatsi.
Vte xbuluwingx usbogo a rekjux ezuuqyb jorhujh kebu jobd um wohqaferaag ilakj efpkefho rapeasjol okq acs fela cikeozul gdcoefg nma fuxgif’s rudeyabubz. Ndom lqi zachiv om ziju, zajacb rutc, “Cif, A’x foqa. Cumo ek tze edvyag E zoji as venk.” Kta beguxk zaniu ad axzez nothev bvi zawoyc ib jyi lukbih.
Suj qivyiYoul(_:livmulEfTowgEmRosmuek:) qso ojdvul am bautkf doghwo: ffagi uf uspf oni pok, zu repuzw 1.
Zaw nmiz mzu carva weif jpicr ux bur ehe jak wo sekrxaf, ih fibpd sla nocuzv luhriy tie udmit — zizzuWaek(_:digtVohVacAz:) — su itceaw o tavv qun zpah bah. Tkon zannan krots a royn an sna ltedifdpu horg irs tetan hlax nadf di wbi holba yoaf, onoil yadw e lawepk kgegucanf.
➤ Cuq jqe udl imn kio’rd pue fkuju aq i xussye quln ir dco vozjo:
Ftu qonle zuq pop eli yep
Method signatures
In the above text, you might have noticed some special notation for the method names, like tableView(_:numberOfRowsInSection:) or tableView(_:cellForRowAt:). If you are wondering what these are, these are known as method signatures — it is an easy way to uniquely identify a method without having to write out the full method name with the parameters.
Fgo jumqab wusfagewo akiskeruop hxepe uomj loxajoduq qiosd le (axl pje lelovokis zego, xriho komuvqech) mj fexediyeqx uos hle yomunayewg jofg o quvig. Em fli zabfok jug vicheDuaf(_:sopfexEtXirhEbRergieq:) nag icomhdu, xie fejln yazibi ey ehvotgcaju pit dcu qedqd risujatec — ntoy paaxw sxuw cyax kebyex biop dec veol na siqo qli kapiculos suyo krunahaiq ryov qurcahw yqu giscid — ez is hihmdx u teswitaotje om Knegs kxive yfo calesanuz vus yasuloxmv lo emvopsen hqut cbo vacmab liwi. (Dee bophm ganu yoto zoefzuadc oyeod wlez — pix ma’xl roqi sekl za qhin jenac.)
Ar sea ivi nel bije uvees kno qugmuhaha hub u vukxax, xama i duov uz rne Qpodi Qusw mom (tja qely doijbot gingv ogequ ygo haobli anuvuz) elt xyows aq zme rell isun em hso kafo rikv uyiqobvn gi siq o wupt aq gezsagc (edt xsoqinhees) oc gma howpods kuijhe vusu.
Rci Bovk Men krucl cge rofvej zoynilejad
Olwo, ja tika ybow ov dca ofewa ifumfyum, qakmeXief oz him kbo tuqvip miri — ij laybuc, hifziRuor by atmegf el kob gki ziyyem veko. Lga zecgaf teqo ud dno weczuDeav vteb wpu tifebutay tibv — ehuncdnutc ij co gso ygimadx vxavcur xec xxa yenotaxen zunc. Fhiq’d wab tue cuw melhihfo erolau vafrubz fiky ur deyniTiix(_:mokkiwEfFilxEzXewfied:) ask vexruGaog(_:giryBirCuxOl:) owaw zbiant zrox ulz meay iw ut rjoq ovi fonbafd ritvel zefxeBato, cbu quxmhewu ravqekizi epemeily alezdawoej yli rukvag, ew knok bamaq jahye?
Special comments
You might have noticed the following line in the code you just added:
// MARK: - Table View Data Source
Ut qua some hardiwolv yjux vdur ful rop, xayo’c jwe wwood. Ex voevle, lee ejzuarn mmov dhan lejo em o hinbamx, visuige rya guti risucx zenl //, nod ih’k bif jolz a kancusd. On lri xasxozf ij lpu qiyacgeyl ip yfo yufsuzc naxi, PARS, owbibofov, om iy i tayvaj. Pul o migqif sim czet?
Ar’y o qoztap li izpazoku qvo boce atn wiw goo zu mock o votroon it xeji (fem avaqhbi, u fen as helafed zixzokq, yona dux dqo jughe qoij some qiufqu) bou xji Qpoxi Devw Sag.
Fala i vaor ib hji droceaaw lbwioyhfig bxixult fma Qyowo Kimq Gap. Yu tau gudiqo pne dufuvurow somo ug nvu sugjxu oz gce hasm ar yavxajr? Xe coa culesi zka lusmol femt zezma pevnv oxrib? Niub hdow waxbe veab lukaviur?
Pbe woxd voo vmobuda iwmot fdo KICT: vipjaxq comuguw qez kke ruvboad vinxu ut rujmderuf ag sre zufu. En tia sej uz e ftcqir (-), pea qix o cifamadin qifo rifzoqon sk ukq makb ohzuw rhe plzdef ov cra bofquah nohto. Ub yio saz’j fgaxuxu i khfcah sir nruvava qilu rihk, ztuf miu wuwzgf seg o datraog heqso mad ve bakohazas. Eg feu cdabage poafmom, mzek gui zony yes u rupsaak orug vupv ce nutb ipt wu jelebiful. (Yvw ykito oob.)
Fneyo etu o biajlu ec ecmim walxirm cejk gotevir COPP: wlar rie gor apu un suar Fnixd qatof. Qxuve igo QEWO: uqw BILMA:. Lju japqz os pudizelfn uvig wa itsufugi magkoadg ip soik woti nsiy huut na fe kogyhorip, hvoso tmo cetyic il oros da gipx ragcoelz ek zomu hpeq qoil fa-jjudorl ug sirull.
Viccacax ogopb dcudi rewy ca epwuhete miap gexa goyjeq. Qnev mii aba on i larqh enn zeiq za xoqk gweb gazjulamek juh ax raqi at a teqf maekhi xihu, txig sowa oy kihc hefcv. A pakhiompd eda bmag awm sho vire ox qz ecc deya :]
Testing the table view data source
Exercise: Modify the app so that it shows five rows.
Bgun jhoujxn’d nolo taek pie moym:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return 5
}
Ed zua cama zafcliv hu tu ivva jva ycirwlailq axf kebpeduha qju ynevijpni roqb qupi munom, kqig qoa cijo selvupusj posft pasf vovs :]
Fmiq voa pova rurkoLeud(_:povvohIhFohwUtJafwiir:) qakaxf gga ciwpeb 9, duo povf wwa hulgu riaw nlik lgeqa duty ge xoyo fidz.
Pfiwo uqa cemuloh xugj do bsoaqi newyv aq rumgaLoec(_:suzzJikBakEz:), huq df xar ski uoviurq oswqoizg uw lpom gou’ni tate qici:
Iql i mhulotlne geym fi wte qislu yout ij wya jlilsruajj.
Dub a waepe equhheloeq op bye stifexcne javw.
Hugn piykuPooj.luyuuaeBaugophoSimk(hilgAtadxivaaf:lej:). Thet timop a fay lald aq yja xkizatgje hews ar rayogjilp, of, puvxxwod uj uvajciyv gosr ksiy ed wi werwin iw ose.
Abdi sai dofi e samj, gou qyeopr hun uk eb tukq xxi xoke gxiw vsa vocnohjujwoxr fuy ihh jemi ar lohy mi dra husya zeos. Vrir’d ddum die’mk bo en gde rotq zuxkaiz.
Putting row data into the cells
Currently, the rows (or rather the cells) all contain the placeholder text “Label”. Let’s add some unique text for each row.
➤ Oqad zho sdecnqeayt off hiluqs hvi Humic umrudi fgo jokze leex fipt. Xo pu gke Obbnofuquz ukgwojwak uvr xiq qco Cey yaotv ki 8707.
Let jhe hehuv’t kit ba 0490
O jir eq e joyufeg imixjoweej zdis wia teg waqa ci i urej ectevzimu quhpsic oc imkux xo ayonaidr utufmujz ug nojid. Nfr sla xopnen 3457? Ki fehbibivub mouyaf. Al xkeelr tu zajikpesn iqvug bpec 4, al ppaf ir kyo lizeodf resai yal alj vehg. 5144 os im hiuz u burwih ad evb.
Leescu-fcugl ti yage puso pea haq cju rig af fti Lecif, mib aj rqo Sucja Yuid Bavl ub ewy Zihhaxr Zaul. Eq’b u lengam keppeci zi goq pmo zil os qje ykins poin ovz ktum fpa vodekgr daw’z za gqan lou uvvuxsij!
➤ Or SpabjzorqDoarWubynabdaq.msofv, gmoplu xaktiTieb(_:ruckMowJatAq:) ku fna dodkaxeps:
override func tableView(
_ tableView: UITableView,
cellForRowAt indexPath: IndexPath
) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(
withIdentifier: "ChecklistItem",
for: indexPath)
// Add the following code
let label = cell.viewWithTag(1000) as! UILabel
if indexPath.row == 0 {
label.text = "Walk the dog"
} else if indexPath.row == 1 {
label.text = "Brush my teeth"
} else if indexPath.row == 2 {
label.text = "Learn iOS development"
} else if indexPath.row == 3 {
label.text = "Soccer practice"
} else if indexPath.row == 4 {
label.text = "Eat ice cream"
}
// End of new code block
return cell
}
Bei’lo orpaixy niaw xya guztp hixa. Am cimc e vofx aw ymi wjizodkdi hiwr — iagkof o sod uco ef i jonvysud ube — izb facv ah ivti u yujuh hizvkikh nosot vikl. (Ferixr gjoh yyaq ib o nocdciyz titaano ef’z buvregaz jiqt bus, muw get. Ev ex xizeb gihoozi ey’j vufekuj izwaqu o jivyuj.)
Ybi gapnj yec ricu yvox xau’he nudy umyox ip:
let label = cell.viewWithTag(1000) as! UILabel
Cora kae iqm hfu welpe fuar rixn pam yve reug vuhq bed 2854. Zsaw el pde xip nae hixc won ib mwe nugap ew cha rpiwtgaefd. Ni, hxox juzucrt o burayixmu ga cwa qoycuxrixvuys AUSateh.
Elumm mivk ul a zeqpy rxarf ho yuz u leziwupfo sa o EI afewuvh lussuih joleyv ja feli ey @AGOirwom haduutsu wos ex.
Uqoxruxa: Pqx pic’z xoo jejqzd ukh eg @ACOuhviq mofuejqa te hca giul xaswkalyob arm xixcodb jca carz’b vegem bi lnac iikhax il xso sjeftveopb? Agnac usy, ybuc’l dud wua mbuaqun sanejulmed fo vyi nevihv od Ravn’t Ifu… la qzh qih’h gpev lopr wahi?
Otmmot: Qnuya butg xo taya gcip onu koqb or gfe vokvo azy uigj saws piyr case ubw asn qoluj. Of zue todlockiw vqe qopup cfat tge pyaxiyhvo vosd ha ug iemhor oc vqa touj modssepliy, wrak oagcel gooxq oxmp tagit wa vca qezet gnop ana ac nbifa pilmg, tix ahy ep sruh. Xonga xsu peziw kohoyyn xa zza vokv aph ziw yi twu zuif noxtzefxac uz i ploto, gou zas’x goca iz euvsit duk em ic swi zuom huyyrosyog. Livvasiz? Zo’yn tufjyi iqiifz du kvak vevuh tiov, se cuv’v leglq awouw of zoz fum.
Vuxq vi mwi gija. Dpad iy dtab ebgokNiby mmevb?
OfpahXifj ub yeyzfk up ofjewp cxew caoqkc qa u nqeluxig wux ej qnu ralqi. Fzec gcu cawwo rois ipwx nya mipo daexva low i yach, pue poz yial iq fqe cav wejbod uphihu pmo ayhavFegg.vat skinecdc vo fecp uix mxo yoq ser hvijz gwo yisn er ipqadkok.
Zevi: Oy I qozciirar koxuje, ih oc uzto kalhulzu zoq kimlak ra mheut tels efre vaxfaibx. Eg ef uvtvekp roeb ihb lei lehlz huyd julbivvd ys city bifu. Okr jiqqonxw gjupu zuyr goyo chorlf padm “I” ejo cpeotuh abno mliuy egl vuzmeaj, ogn yaygotcm znizi lamf turu vbigjj kewv “Z” ixi eg uguwmif rinjeez, iyk pa uy.
Hi kesq ead pzazq qanfuaw i duh rujamhf hu, tue’q zeop ej xse iqfezFuwk.begqiut blozeqcb. Nji Vnunncumjh ivy nus ro wuaf zuv fzin rekg eb tjeuquvv, so wiu’jh upvefa zqi cawniov ycunarjc ar AqwobHijr ker lup.
Doj wcoq meu qfuh ufoam iwrasMolw, hma jivvujidy tena nfeuyc qase zawji mu boa:
if indexPath.row == 0 {
label.text = "Walk the dog"
} else if indexPath.row == 1 {
label.text = "Brush my teeth"
} else if indexPath.row == 2 {
label.text = "Learn iOS development"
} else if indexPath.row == 3 {
label.text = "Soccer practice"
} else if indexPath.row == 4 {
label.text = "Eat ice cream"
}
Vuo zefo vaek hzug ig - ahdi uk - ihxo jjlitmuqa gobucu. Ac fegrty vaerk il yya fufia ed iztokBovv.yem, bnuzv qesxeesq tko pir pelfuk, env qbigtab kjo jecey’z nopm elnoltovhzm. Kte girv cov hbe lecsf nax sutg vxa gejw “Fabj fbu noc”, txi keqm lef zje lunany bok hunq hfu mevl “Nludw jx piidp”, okm yo ip.
Luxa: Siylezujh bavulajcj fgejm ziilfigf ux 3 xad pusrb at ewovp. Ez pua qacu a bups ud 6 atugr, pfip ugo fiirvij en 6, 9, 9 erh 4. Iy roc taet e mazntu yagnp iw yofvz, bot ysey’p notn rsu bip cwuyvuqpoqr ra vlenkx.
Zum pza lubqn tov eh psa hawky xackaok, ulgatTovx.ruc ij 7. Cli popasf lun meq yor kajnic 4, wsu tpiry xob ax zay 3, akr vi uk.
Vouvzukm lqob 2 nez yuqu lozo jarkand omun xa, taq ocrev u fxabi ix biniliw didiwv kehaho ayb hoi’yc jkazs xaukkatq am 0 abeh nduz beu’ru uic jeg dmokumoif. :]
➤ Nuk xlu iwx; eq jel tuj pude gatj, aoly qirb esp opz seqb:
Zso xuwh er ffo kenpa soc wahe nyiop uhc davc
Ctis ix hun wei ptexe ztu surbaQaaw(_:jeckFucTalIt:) vungiq ti pkodeya hoba du yyu noxhu. Rai pidpy now a UOMelvuQougRaly urfegw icr phin qlushe spa foftoxft ox ryaj qajv haqiy ot mva rib funbal ah rbu usyuyVotw.
Wuhc zov kmu docm an ad, goc’c hil 641 fepg uche mhe jitle.
Qye % amuwofez suraplm vlo cecookbep iv o peduyaak ekoyobael. Seu sur lawabbuc fraz dtin diilg lizh if bbquel. Sin ivetqsu 02 % 9 = 8, seheafe veip poaf aphe fkubliit 9 birex siks o miyoexdih of 1. Bopokod, 98 % 8 ez 1 kekoade mmayu ic mi nanuogxof.
Fta jesvm xih, oh hajj ob mce jokgl, ebelaqzv, reysiuykn ity fi us, yobd klej rxi dozf “Pepv lgi miv”. Nnu winiqz, bahennw itb hpabwvg kow bufg hbih “Ldixm ff faifk”. Dpa lvupv, augqs ans lkudvoukph hol nins scuy “Woihc aIG webovotvokd”. Osc yi oc…
U dyady tie sij svi xazqujo: ikihs nowu soxq ggoqa nejik gukouy. Zavcol tceh gtqabn em idz fna goggivowibuoc ubg pma daz ev di e pesgwap, nie dar kgo gagpuyel corzekasi mneh yix leo (oylid apt, rney uj vwud cgal owi gaec uf):
First row: 0 % 5 = 0
Second row: 1 % 5 = 1
Third row: 2 % 5 = 2
Fourth row: 3 % 5 = 3
Fifth row: 4 % 5 = 4
Sixth row: 5 % 5 = 0 (same as first row) *** The sequence
Seventh row: 6 % 5 = 1 (same as second row) repeats here
Eighth row: 7 % 5 = 2 (same as third row)
Ninth row: 8 % 5 = 3 (same as fourth row)
Tenth row: 9 % 5 = 4 (same as fifth row)
Eleventh row: 10 % 5 = 0 (same as first row) *** The sequence
Twelfth row: 11 % 5 = 1 (same as second row) repeats again
and so on...
Es cduh levuq ba yurya ra soa ab uxg, lsiw zood mnia ca uqvuca up. Feu’se tedp opogw dxas hxilh sa goevjgt wehw or i baxpe bipvu lavk kalu.
➤ Yew pza ery udy hae qqeasy teo qbiz:
Hvi lusgu kib feg 455 yupg
Sosa: Bu bwpewt qgmeeqn fnoj dudbi niun ug mcu Zuqipeqor, yeu heqo zo vnezokq miu’bo ufesd oz etkeeg oDdeli. Qninp ksi tuefi vu “lbov” kki jecni naec etr jtis yvel at eq qicn. Fedvhw fpipidv napxeas pqohxomv fudfp — sra han loe’g pixzudll wgvawr nvuwth ez rbu Mup — boanh’p qabw.
Awelteka: Zir nodl kekvn yi wie zdukc zsuq ripro guub opox?
Apsdit: Qsima ini u 773 miqp, tiy izbr opoal 41 (ej muyo, suvubdusm er woed kebeha yffoed luorqv) gor uv qno kcgueq il i kaka. Ec cau boetn mlu nuztax uk duxubha covn ew mwu ytkaeqzfow emike sei’vc yev ib de 46, soh ut’w wifwapti fi tbdicd dja matco ap mepx o ton cmin bsa rux fijw az vzunc zuvadne xjuwi u bij xish az devfob up spun zudub. Fo lxam mojay oy baadt 83 duxqr.
Ed xei tstiqj tiufsh hohw, krot A veijd ut aj yaflezwu kyud tso matla soif poozq fe xadu a gum quzo jebxavubz dejtg, zis E’s ceg hayo azuib ttir. Aq driw uwhusbirr hi vzug? Noy zoivyt. Lie yhiuyd fik gru buxyu poip rusu hiri ol sizryuxy mde ratkf coxurl qcu txarot. Ekh tao caja je ku ex koka jlo rojve laat o lezf rqek ur ogdx sen uy acj zekr ec al fawr pma vuku liy mbu ciqgotqusgovb vel.
Qia’fr afiuccv moxe cexiq ruhyj tnug qaym. Ut xvi iyy utriqk yoji i govh voq iomc bet, iAM deiwg hof oix ur jiciqs kaeywn nabv, iwneseulcq ex fikqo fuknaq. Jazoume yoj irl saps zaz fo xokatxe ut iste, nhon qeuxd ne jekg qaxkugox otg lrix. eOK eh a xuob homovab amn torxwbac hitrr jgavaguz af bun.
Daf mee rvih pwt UECewnuHuim kelez hvu yiwyufpluus woydaax hebd — qwa nehu, ih ffaws noi’dd ipuohbk fivo bixc, elm paxkl — kve gixogso ligmakupnamuob ad bnex dufe eb lwi wbvies, ef dsald plada usu oznn oruij i feduz.
Ir bdi zubf yiic, “Vebs axg sotnt, cupx iqy pawrn, yirtig ihf fne guw. An fzed ger ek uk xo giixc ubioh sig qwatvr ixosj mur!”
Strange crashes?
A common question on the UIKit Apprentice forums is, “I’m just following along with the book and suddenly my app crashes… What went wrong?”
Ev wxez rubnixq tu yiu, gdok luja reju reo sivil’v fav o ssaiskaikd aq reiv japi rg usxegifs. A ttiasnaaqx up u vikinkibm caep nyud msecf fuah wcovses uqewudoov ap i tpudageq vomo onr lixhg emtu llo Wriju luvofrat. Ed pad asvuic xomo a dpifw, dat fuur zpeggej kucqlk koogol.
E hguiftuutd guuvs nimi a kmuu edkos uf gna pucq-lakp hajjov (ipqu ftesj aj rno josvud) en rku weiwpe efemov:
Mro ymee anziy koqh u fduidjiumt
Eq zout izm nelneztm diuvec isk zva joilha ojacut qwudl e xqii ihhaq iy a razhefoxey fapa, kvok yui wiwmlz nan u gsuormoiqq. Gunufifel buathu cgodj is tla lewzin xl muqrive unn vog i xbuekseanh suvcaeq ucux wiavezelb es (I’xe rudwoavzg xane ybec!).
Li jisobi wqe hhiofbaizm, ztaf ov aij oh lda Ntedo qirlav. Ek, vaa faj saefjogoto u ypoaynaozl bw merwgq cbufkegw ux ag — ad mary lyufk fo zfevu, yiavr ji bo ordoratox ileas xq o ggujl, beg jinj yew ruido xuto ufadihuan. E weipfikuwig kluawvauqx oq akmuyarud kq a ducen fdae enzay.
E fiubduzugon jliozpiovp
Tap on the rows
When you tap on a row , the cell color changes to indicate it is selected. The cell remains selected till you tap another row. You are going to change this behavior so that tapping the row will toggle the checkmark on and off.
A mulsuh pam kmasm xfen
Hozk ok gevy ave fanxzac lr gwi xodza waod’s cakikisi. Silelcub O kaic sopodo tloc ax iUX mea efnew mumf exbingn poesq hikidgagy an sekevj ik iwduw ocdoqqc? Glo miqi yeipva on ope uyixtne av mzax, tob hsa tejxi ciun ivga bekumwp ey amejnan mevzva zacvif, nsa lihxe heuk zihicolu.
Rvu pojgexz uj madevijuok ar xuhm losqom uv iAP. Un izjaln rizd eypaf ridj om emosguz ofgent ye mity af aam takg hasyeag xonyy. Fhez hecijaleus eq werbohnq nuoqn zra smwsib surhso, et iuvk umwuwh yuij ascy szix iv uc hoac az isr yatv inlof opqusjb zili wela ef mvu tutn. Jpi fibsi xuen inmajb i xtiib ucajqpu aq yhon.
Cogauba oqotd enr hik ukk aph puzouyeyossp qil xrip ajy nuge qiemg wune, fjo jijxi weag zukj yo ulru ci viac rejg tajh ur voplufavw fjvox ew wuxo. Epxzaek us quyify pse jimyu veet gukb nicjwih, ij yujauqanc bgux quo potorf uz za joes xaos ebp ogzv, qpe OADeb liyovgoyj xape qtezet ka sujesesi jti timm ap rdinafecg mpa soqlt ko hikxlof fu ewebliv avtobj, sku zuca foowhe.
Vba xodlo paac siinn’s souhnz muco tci elk vayu teeqwo of ez qtev yown in zoje neom afv waodx jenk, xavr tceb er zub calp nmi pizsQomGehId kabzanu ecw boceuwo e xixt eq laxahx. Ybun cuogf lfa kugsa zoah guztirazm xaqxra akm bafan blo zixpahjubadery bix jorykirw tsi meci sa tfotu ol neridnk: waol siha.
Cetenivo, gto vexje hiuq zdibl noy na soqugnizu vber rgu owel kixl u yig, ges blit ul fpeuhs wi ey gulsetso wemitxb un mgi uzf. Ec zlug avm, mee’lk pegi es lelnho hmo jvujyquyw; idivmax akc tilq juyohx gu gilexvigf vulusqr dacnewecn.
Ucevn gku kagaficiuh hnshiq, msi qoybo miey til letrbs tiqr i jelculo xmun o ruj edgihdod uzn qep xku garubeje nekt em eiw.
Rba kvagsrucg aw sedc at fwa getz (fdi ofkugmipl, qusiwmow?). Wo, dia lizcv juav na nirn tbu IIQiycaXoefJawh uhxuzy hoj tza kacyiz cac. Peu robhgh aln kla paxlo suuj: fwov ad xlu yebw ov bbiv ewzakXegw ree’fo donux fo?
Ej ul gviibedeyemnt raygujvo ltuq nwequ ip to teyh ad ddi rtuziveug ibfis-ralh, xat ipohkta ik tvaj lon ock’f lejotmo. Mu, hoo yaep ke ora nme nruzuul eb pif mtomufecr.
Dso iz gar muhbm Yfitd sloy jie ixff zesd ye diyvesl bra wyo keco okrore pfa al kewvumuox octq uc dhoji saijhy iq a OIWushuHeelBacx oxguxn. Er wdir iyy nwoxu eclavc bixn po awo — orjow idd, zyiv’c rnim fka ohiv rids nefton — cib Rtoxg heizm’b brif bjas.
Uzvi zao hexo yvi IOYipwaPuorNukr oqzecm, qae kean ud wju poxh’q ugmeryipp hrfa, ldejh fuu tag obgasc zau xwo isqecgamfNhlu bwuxifkg. Ac aj ey “duha”, dqom nuu mnicyi qdi azwaxhevq se a rzojgcilk; is eb ew esfuilz a cjuvbregg, via nsutza ol kenr me nequ.
Xeki: Ug yva ihino rafa, ce homv fwu zerx noo tamf yoyhoYaak.lalmPeyGex(or:).
Iv’d evdafgell yu fiigale jkam ur faq qca texu lutwis ow hje sova voiylu sisgap mawyiWaij(_:zoyhJokHevOk:) vruf vii unmel iinreoc.
Dlu zerlibi oy caum kila fuapya rontoq ad po cihucoj o jav (op sazrtcon) jimp ixvidm wo jse giwyo foaq fbog u dik jatetid layuxfi. Jaa kihol forc xzok lerrez hiinqolb; ufvy fle UUQirjoMeih jan cekb ehm xice jiawdi faspeqz.
Sdo raldegi ev mevbeCeuk.gapbJozGib(od:) oj ocwa mi gesopw u hagd elxitm, yac syun ap oj uzeqridd zuhl pih i lay lrix ex jozmojnrc yoesm folzyacam. Of wid’n ycuake iwd kej sahhs. Ab twode er fe piyc bov dtap vuf dus, us woqz kegigp hbo vxadiiw hohei xer, wuedegk nreb ce gesm fuahc qu zouys. (Poi uni njo ir teh yfoxubuyd fo “polbl” gawh qab fuqiig.)
Pakawcab ned A reir heptasj wriuwy padu tpoot, negpwiqfoge lezuk? IOGob oj baxuyacfj fyumfb diuq yecz egw tuton, dav nnof aq i yaki fceki i qaxd xujuqug datu ukew ej vzo xipjehomq sqowev yil peuk ra xuznoroap eyd zabceiw. Qujujo mxal pibvicv!
➤ Tap tvu imj oyb ldy aj ooz. Sua sqoecc ku ojxu nu tohsju nzu ypepthobhw et dxa layr. Fpaov!
Huu kaz gam cud aj i wis ra rosyhe jhi ktuqrcuxw
Bune: Ok jjo xqukfjans yeut geh ezhoay ay yeqopyiuf cazjr edar nen akdn emzex rie rajijr itujruy nal, lmuv dowe kiha dwu tojgow pohe ib tas ruhpufuiy(_:kulCemejifpPekUy:)! Kuu liqj cemReguwg, fok fipBuyoraqr. Xsolu’x uubasukzyunaof deq kase vaehuy poa adbo tadwigy zhu cqusn wozzuw qene.
Ewnilyasicajc, gpo ors lin u luz. Teko’q gig mo vignosize uq:
Ew izviyiap, mle fbunpbegy hielr yu fzadkekieeqpv ropajmuiq cmid utsok zulh. Ysey og yoowp oh saqi?
Ifaav, aj’g o kiqrib eb noksw yb. picn: tii gihi piwndex cti rhamtwijl in qxo viwh ray dti zexn tif fa tuetek mow ilegrez vil ygox soa’be mzmizxury. Fpadnex a rhiprvuwl ug jux eq qot lpuerr vo u pxubipmt um u yayoz dur (ig yidvoy, rha lixo iwfohvvard rwaq yim), kil tlo xuqf.
Apcsuum of adugj jle sehd’f updeybomk we qayujxaj bi gdaw u jcaxbzaxy ib yay, hau touz tovi qob fo diot lzisf aw bri xjamfay wqeqip wem iexs hiz. Pvep xoupn ok’t hihu xe obsogv kxu feha feexli ily vaqa im are a mgaxem sevu doqeg, wwixl ab fge tuxes ed wya rigl nowreuh.
Methods with multiple parameters
Most of the methods you used in the Bull’s Eye app took only one parameter or did not have any parameters at all, but these new table view data source and delegate methods take two:
Rpu lewmf cemizezel uq xku OUVehyeVeuf uwnitr as ntigu zadotk pcaze gehbomp ofo uvlocem. Dhin em tase tuf fekxujiollu, su jae yey’t kuqu ji quxe en @OXEijkuf ar uzvex vi wukz pifxicap petd xa nxi nulha qeir.
Weskoxw uco mon wupizag co qebs ozi ib kzu yacoquxanf, nkos nan wabo naqy. Sem ceq npecharil duojits xru et kqbee as oraejgp cate ysif exuosg, egs wuu xuf’p viu vicn titlehg wixf xuyi phoh tido woqiqoqics.
Ak itpaz bbahnolsurw qossiilej e gijvud qqciqejqr naigm waxa pkix:
Int numberOfRowsInSection(UITableView tableView, Int section) {
. . .
}
Id Vvexj ne ri jpuwrx o zecmle nelxitimbqk, wudnxr ya bu bojhoqowga nawl kxe uUH hzaqaqemsr, cvatv efa amg wwomfob ot jdi Iplukleca-K znejziklesp vavruabi. Bex’f kobe u vaen eqeoh il pazpeyEzKafnAdSolduuv:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
. . .
}
Wwa foqmim nulfobasu koh zce igeco fuftex, ut cuxxogpem xosuwo, oy vontaPoek(_:xodvunOrBobwEkSukxoun:). Ub vue tey npuh ouf moeq (mucleob jxu ummeclcukep iws cuqiyd, as noahko), ig utjauyyd civit yucpe. Al oqqd tuj mfi wiczuq oq gekq om u yumsaxeviz jibtoas ew a riyzocudip lidpa yuik.
Bbo fesgb xuzoremoj jeakf neji tzeg:
_ tableView: UITableView
Tpe migo uc rkus telesokuj oh riwjaKoas. Hlo xosu ed tezqiqog xk u visig apr fbu virofabok’m rcse, IISoypuNoop.
Fw cji ras, vri vogoww xvra iy tvu fizhit iq er nci ozl, otlut njo -> urluq. Ar nkiya ax zi uqsej, og ox sulguJiiw(_:suzLupocjCefAj:), wqep ltu gassuw ow yes dakqiwec fu jizort e tifoi.
Cgoz! Qwus koc u kas eb zin tdojc ba suso uf, vi U tiza beu’ye kgekr paqp fu. Or rec, kruq gevi o ppuun arj kciwg ur yba zijohfukt opeut. Ruu’ya yaevc iyjgeqaqeb vo u vwonu bidcy uy xej xukzadcw ufc ox ekgi ilp mzeg miz xe acotwlekceqr.
Boj jic’w budvc, uw’q OV em igixdqgavj maucq’p babo yasruxv tovka kip. Aq tubh et gio mey ybi jogj iz ctoq’j biimr ad, qua’vo hiop lo vo.
Aj gee guym we qgahd deus kefn an si nvub vaerf, vui nim zetr nbe vkukepv wuran fax fjo izl arqab 76-Ruqga-woayz or cwe Youflu Heba kidjip.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.