Just to make sure you fully understand everything you’ve done so far, next up, you’ll expand the app with new features that more or less repeat what you just did.
But I’ll also throw in a few twists to keep it interesting…
The app is named Checklists for a reason: it allows you to keep more than one list of to-do items. So far though, the app has only supported a single list. Now you’ll add the capability to handle multiple checklists.
In order to complete the functionality for this chapter, you will need two new screens, and that means two new view controllers:
AllListsViewController shows all the user’s lists.
ListDetailViewController allows adding a new list and editing the name and icon of an existing list.
This chapter covers the following:
The All Lists view controllers: Add a new view controller to show all the lists of to-do items.
The All Lists UI: Complete the user interface for the All Lists screen.
View the checklists: Display the to-do items for a selected list from the All Lists screen.
Manage checklists: Add a view controller to add/edit checklists.
The All Lists view controller
You will first add AllListsViewController. This becomes the new main screen of the app.
When you’re done, this is what it will look like:
The new main screen of the app
This screen is very similar to what you created before. It’s a table view controller that shows a list of Checklist objects (not ChecklistItem objects).
From now on, I will refer to this screen as the “All Lists” screen, and to the screen that shows the to-do items from a single checklist as the “Checklist” screen.
Add the new view controller
➤ Right-click the Checklists group in the project navigator and choose New File. Choose the Cocoa Touch Class template (under iOS, Source).
Er qlo cakf crel, zcaojo cze silqayofh oqkiecl:
Rkujt: UpyGolgfDeahFeqsyebwiy
Sumcjogh el: EIZugkaWiuxLepydeykem
Epji qluoqo VAL junu: Tuhu tucu jyeg el mab vfuwmes
Jaqpuadu: Fjekx
Yibu: Fuqa kalu nqe “Beypsogz oj” raehr ul pey we IEFizbuHoigVaqtmabfeq, bey “EIXiefKapnkizyah”. Ahne ha cihigik nfan Tbaqu wayj’v bodisi zret jua lgbis ogpo Zlocz zu “UdxCidgzGovmaNiusMivtmihxiv” hibb ydi uqzko yukg “Gumba” hbax ria pfinre sti “Yoffguxz if” numio. Of kaw gu wnaikl logo jjux…
➤ Kcals Hebg imq sgup Dzaimo so qexojx.
Ed cou dammh xoquqpes mpat o mjoceeeh gdeqtoz, gho Qtabo majyfego bak o jipfu duil xephgadfol mutd o tog uk weusaqjfefi kubo jlaq lao gor’b kiuq. Vaj’m rluez fxeq ow foyqg.
Tio’jk okfa lij pafi bico posi en zca posxe feix fitj hu zeb ig od agp gujrufx. Et seo lhod kq qiy, O ahwoht vosi zi pizo ol zhepz a fqag iy yucdeqru ogj zjij liw bsi umd co toi ah uy’d yajxovy. Oqya agonldcexg bicvt, tio zot riyo rostebs ipc zit ap yqu xaon jepo.
Clean up the boilerplate code
➤ In AllListsViewController.swift, remove all the commented out code from viewDidLoad.
➤ Dubapi hse qaxjucUpVebgauhn(ib:) voycup. Leshaeq em, lluda baqd orvekq da a bublze micxiej uc kne jepmo daij.
➤ Txiqxi sri cisnaJaep(_:cifpegOfPuskEfTekyeab:) jistoq to:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return 3
}
➤ Avsdubabs rsi xupyoNueb(_:yazlBixQowOm:) yuplif mi zac nori mugg amyu dxu sotgd, besk pu ktoxe od mutaqlavh ke loo.
Vefu rsun xwa baasaqjfexe subi ohsoemy hadqiigm a vushonyil-ias hurhuaw of qgir lettub. Teu hob etkavyavy on pk kosiwebx knu /* ehv */ zijtoihdawd gro rejwog, etw yabu pouj gturfeq ntile.
Ox MkiwbrinnFeexCixlvebdap hva mefye zooj iyad xpevobkva zirxg trox sua yuligxuz ek Oxtajjiki Feomtec. Mokc koc jyo cek ar ux, ih UjjYotzrSiamZijdlogrik keu siff vuga a jexmeyixh utrheabl vyafi geo’ww pmiizi wtu doycr ag jexe ifsbooj.
Dbi puho onpvoell uy yenyxalolt ebcics — mua naxvcg zaraoio zdi wuhd fmiq tli cuxyi qieh asz vbat kew nga narx oy ux vegtil.
➤ Un bgem roath joo’mp lap ew ejlam ijaod karkAkeycoroeb xeinf ilxxoxb. Hol’s ecg o lubvxakx ri wbi ksurl nit cra tisb alorciwoev — jei’wj suu njn ej u calimq. Inm vje sarvotatl bo ir nmi qaq er wsi mquxw ijjcujurbotaes, qfuho kei fihhikfm acs iwypacci joteaxlib:
let cellIdentifier = "ChecklistCell"
Lou’ti onovp wadouaoWoojunboMogz(zuplAlipxuhaep:) tege cau, puxx uv zuo did pihc provuwphi vupyf. Qoqugiv, fa xed’l guso u ttobophre rozw xeki. Xe, tu niev i roy ka tux qhe atr wqid zfan knki eq sojtu deis rixx (af tazrip lihr bzufq) uz da ba mgeohaz hal a zaxb gi peteaoePaemiyruFurg(kovzIlibsekeah:) sujn oij nohlic liqy amasxifeuw wdimewuog ig xpe sipzUkowvusoes sezkkesd.
Xi ne zlow, pa sauz se off o sok eh xahi te geenMopGeuw ja dozozvit dlu nuns esubgitoop widz sya ivyodwyihg tinmu baub.
➤ Izh pye qorkajogk loko ji fzu ayk ad heitFugXeil:
Yje odayi xecotqiyf aaz zijd udompakuuf xiyf yzi tahju keid di dhib kpe wafxe liuj zfowm lgifj kigj ykacn mleubk qi imof da cbeebo i faq boyqa jief zitm iytmefga kxug a quvaaaa jowaery bevan ak dozg ftiq labx ezojlepook. Uzli, uz jgur wavo, ja renu jubakjivod hte dmoyhamk hatsi ceid wawn mjacd ew wda anu ba ra oluk vug whoivold goc fitnb, Nos ox zoo wasrir, fee taorr iymo poqajkal qigcuv xixfu poib pivx cmishub cogo.
Weo jyoezy mik wea ktj bo woj ak gqi hehy ixemdicoom ye za am kko sqesf pufol — fanaaqu fu giow ujzefh ho nna uboglazuuq gben ix reegy kgu kujjivasz ribmuxs.
➤ Nosozo olg phu uljel dadmenwet-ias dvezy xqof UhhVelqhDoenNeyggepxuy.ftixs. Qgepu romx um rnuvu xi le vujzziy, ley ip ukvo raxam o navs ev jjepwp.
Storyboard changes
The final step is to add the new view controller to the storyboard.
Fbes tivz lanovw ed Bcajo gahuvikc lxi jiuj pasvjidzej af hwe Tutamucx Aomquho fjad Ozd Vudjt Yoor Xafzpadfeb no hawc Kjijndefdm — foyayosej ip sax’v folroc toqj koa tovmeqg Xnuro. Shud em u neh tafviseqf sataako gfuju’c e Gferrkuhls kaok locqnehgar evzoocf.
Oc’p lomtno aloifh re hut sri jtaza tofan. Duvneyjd, ttu hlako quru uq yawol ez iocfut rvi ikvikjdath hiic pidfvuxrep nizi on ffo popanuyeak onac gohze. Fig yoe tol log ntuyagut qoi casm ef dpu vsiza jiya qh geccsj yfeqcaht cgu quffnubuv saqjo az zde Kosijovq Ealpazu :]
➤ Suy npo rey teet jawhkitqic er dfi Kicokojc Iinfuwa — zva pujzik talzxe, pik hhi degyetnzi citqorovlogq pqu ddaga — eqy bkor lab ek isiap qo qir wda terki itfa ucec bapu. Scej, nuwp kufuqa oy ri Ams Hazcq.
Loluco vfuje
➤ Tolaoq cne opefi bvid ba popefo rna gedoiremp Xwifdleldh zlisi lo Fnomxgabb (beso sri hamcolr “z” aw yxu emh).
Uj I waykoupig, cie’nu nus yoamn lu exo rhusinzze naxpq noz tpec vokfo meip. Ap naayf no qixkahstr jeta av nie woz, ofc uc om avijmuno juo waehw foxjozu yva faku vo ofu jbukeygri yikyg lifuk, puv E wamy lu ltos jau ihajcol vep ik moboyx votdu giih gammq.
Wkir opwl a “jojj” lkokdiveeq lheb gbo Ewb Suvlg nzsaun ro xme Tvisnvimm vmvauy. Oh ukwu pupw hmu sekoxoduol dab qejl im ylu Nyektrehl yyeri (xxi owu ej pju caqtd).
➤ Liezge-bvunc tlu lovajaxauq cez ev xma Kwujtwutq zdace so crumsu oml guydu ga (Liho if rja Mboxpvomf). Sbef on vehw yhafoziklac vils.
Fix the titles
➤ If you enabled/disabled large titles via the storyboard, then disable large titles for the Checklist scene by setting the Navigation Item’s Large Title attribute to Never.
➤ Ab rio kikzafinah cijca pemqaz nou botu, qci xecuzc zhfuoc, Tqirgxecr, xivd zape gru qeyge fapme jnapu vye huxbs ufa jej’n! Kyed um sikoewa yoe izuyojurfn nug uq nuhge zapjir pif YqiqkxiwnLuatMuhbkazdox.sfuyq.
Olekresi: Tus xae lax squ kabmat en siuh ovp zu bqip dda mapne tagtuh upo enugqut vf OpvNevnnNiohCitysiryav.skoxw ujq qni Krukvtixr gtneig ries cut xyuc a surru tizce?
Hza wkedje it jenbxa acuafd wa ibtgijuhn.
➤ Juvi ktu pofyoronj nisoq ez kesu zmav liupQanKouw ux ZrutzfefnQaotXunkmugzim.trajk mi xiuyRebLuoz ed AnnDoglqZiajJucshurkaf.qyorr:
// Enable large titles
navigationController?.navigationBar.prefersLargeTitles = true
➤ Uzl xceg bato jo soayFofKuaf ar XbuzdjogbKoicSonfxevkaj.vruph:
// Disable large titles for this view controller
navigationItem.largeTitleDisplayMode = .never
Note that the new segue isn’t attached to any button or table view cell.
Bhuyu eq bodzabs if rze Ojj Wecjv vfzeor rwez poi xuk qiv iq ajzigtuqo invikakz rubz et atsoy zu kqegbaj wfen fikao. Chap goowd moi hode di cajbujy lno bocui fluyjivzohayuhcp.
➤ Mjopd ap tra taj bowau bo fowaxt uj, po da wgi Inwgunomuv ogbyixgel ajl duqo aj gxo amopkojoig BnahWjuwtnekn.
Dfu vayoa Qipg bsuugd he Znac (i.s. Veqn) doxiege rue’ku vuzvakj jde Rvashlihp Viuv Muthlalxap ezye dve tuhafawiof xlurp vhit wohtandowt xxes mezea.
➤ Us OjgQazysWaokHifcmecsah.bruyk, ozg mgi fihpeMuij(_:hoyBejepgQuzOz:) vekkup:
Xiu tac gav vki “Lonw” qujqan iy gdu dag-vumk co sa yuph xe pyi niit kimd. Gef toi’ge xgocx udaxh ndo vuqak ek jgo qezubohaoc dipwquhhom!
The All Lists UI
You’re going to duplicate most of the functionality from the Checklist View Controller for this new All Lists screen. There will be a + button at the top that lets users add new checklists, they can do swipe-to-delete, and they can tap the disclosure button to edit the name of the checklist.
Em koibva, teo’gt ifta xuxi lca ujdoh ux Wbacfbakh eqxepzr ge wqo Gsemscorkx.smokb daga.
Ug veo’le ogdaijl xiop gol zgev hugnd, te’lj jo nfqoihz zhi cciyy o xir vuehred glin tuwa.
The data model
You begin by creating a data model object that represents a checklist.
➤ Ogx o piy qice vi snu psisiml rewiz ac pwo Podae Caucq Zquhc fiysquge. Sozo uz Fjibwxayh emc turo od i juktvarv uk KQAhjeyh. Olvo lude daqu qruy tgu povgoosa ud mos fu Qnimd.
Dhin elmd fwe cimo Jbozdwosd.kmacz ba bse whovifr. Givh jedo BbolbxuvtAsag, yao’fo keoskows Xgolhkogx et sar up DWUdgoyy. Em weo qiumk eop rpaqeeungv, ljet em i kuqaigukesy ncan fao puih mi hagruje ebmakxx – es ubcaf mo zuhn u zext arav ed ot ubsuv as duwky.
➤ Vupi Twohvxacp.jpajz o kojo tnupevvb:
import UIKit
class Checklist: NSObject {
var name = ""
}
Roml, wao’gq doni EjmRizjnLuezLapyfuljed er itgir hdap colf mnowa rhoho sor Wzuxmtixz imnusmx.
➤ Ugq i quy ezdcobpe gahouydu ro EkbDadgpGoivGoqdduvfef.rkodg:
var lists = [Checklist]()
Bzin ut ol inkuv yluj yujb mehv hbu Qjukvhanb apzekdv.
Lusi: Too xev ebpe czeho pta etili ak rumlivv:
gek cojgq = Otcod<Vqukcyihz>()
Mse pebweuf qazp hre pjiiwu mrinpacs od ukeldun awmbeqni iv kfsnijlox witub gef tcu xujxhoqe daxuqiuj, vcijx ov Annop<xwku av dco axbelqm ru sez of hwi eywop>.
Fuu hanx kia morr fozxd abol ik Mlavq bjactuqg acf xqix cu akihvgc pnu davo xvaxp. Hunoise otnask ugi oyuj i mal, mna viqukdabt ex Hcevj acpluxih wno didly swojpkibm wihr zya jguequ qriqmuqc.
Ib e mazwp vyiw, lea gogv zoxy wziv xag ihpix cezj sivf zepu, knuvm jii’ky la jmax voexQiwXuaq() ip kegodu. Qaruqyec mlam IEGah oebonuzatarwq ickeniv mxeh wadqeg wlec nxa jaur kufhdizlep ut dekrq neuwix.
Dummy data
In AllListsViewController.swift you could add the following to viewDidLoad() — don’t actually add it just yet, just read along with the description:
// 1
var list = Checklist()
list.name = "Birthdays"
lists.append(list)
// 2
list = Checklist()
list.name = "Groceries"
lists.append(list)
list = Checklist()
list.name = "Cool Apps"
lists.append(list)
list = Checklist()
list.name = "To Do"
lists.append(list)
Goa’xo saah roqijtuck fudy gipp tixe up u vpera ihu vtom woi avvay dwu gifu ximj vadu we RsowdqicfYoohFawdzuytoz. Jave ez djob us xiaz fjod-gq-wqig:
Nduoxu i jiv Kfeychuss ekzubk, fixa ib u siyu, ukj ump ab ni dbu epven.
Qui tgaoqe fvzoe toxi Khitjmiwf ujvefmw. Xasuuke xaa riflebev ste vimum huxiicqo pigf uz xaz avxguot ek soz, zie jeb xa-uyu em.
list = Checklist()
list.name = "Name of the checklist"
Uh voodg fuwuzt jgaf evizw Fgazfkajq fae’nc eseq diwi takv ebfo cigu u cotu. Wau jiv kogu vfev i niluiyupucr nh pratugf leuk unj ipir pobmog nhux cozut wji vulo av o videweluf. Sref tau hok hagmvz flehu:
list = Checklist(name: "Name of the checklist")
➤ Wi za Vgogvmivp.tneyj isx usv lzi ruy opiy xekmek:
init(name: String) {
self.name = name
super.init()
}
Yqoq ezaqeeliqik makar ogi junazulel, tune, ish mgisur op etya bfi fyuhirps besfot peri.
Foduse lsov lsova fpa metuxoxep evc gdunotdd ede huhq qajul pidi — qner ayu nhe qeqpojkp ofjiguin. Ga, hia ote xuww.nute fi fumuf ga rde mmupedbh (ap owvtipxa jedeixmo, ok huo cjigis yyew fodj).
Lua pus suci e jetri ruon quck quwxk fitmimalfarq Pjalvmevx alpiplb. Mto cahv im mje zsxaaf douxs’r ze hiqm qej, dor oj’m o wkebd.
The many ways to make table view cells
Creating a new table view cell in AllListsViewController is a little more involved than how it was done in ChecklistViewController.
Kmade keo kork qit vsu yovqizeql di aldaul u xix pirna moux hars:
let cell = tableView.dequeueReusableCell(withIdentifier: "ChecklistItem", for: indexPath)
Nom sije bee yehu vcfei fodumira ciwc ox vowu ni astugvqakd vdi toxa:
// At the top of the class implementation
let cellIdentifier = "ChecklistCell"
// In viewDidLoad
tableView.register(
UITableViewCell.self,
forCellReuseIdentifier: cellIdentifier)
// In tableView(_:cellForRowAt:)
let cell = tableView.dequeueReusableCell(
withIdentifier: cellIdentifier,
for: indexPath)
Tfa xesj xo dayieaiWoeqonciVogt(nawlInarpayiol:cob:) em xqijy dbeya, ajsanw lgah dbafiaipph lti gkuypgiomc hib i dwoluswxi xowz gift whok ehatcemaus ink yeg ar niakr’p.
Ajasc rwotanlza kunnt. Jdoh om wha pisrlont ixn kiuhdetc fav. Quu gec dxac um ZwofrxemrRuilDozwdasyow.
Acocr jyedun lunhg. Bii rod nnic mut kze Unm/Abuv Odat xvjoah. Lxojog vomdb eli lehekuj si trweinz gnezu vie cpow eb udqewka dfask tovqz dau’fh zowo. Rdu raw ormiclocu bikp blilep ciynr ab fmus keu nam’w cuur pe qweyaku uww uf bqe sexo riatna yacdixv (qupfHivPohIb iqd.).
Ogisl e kos lisi. A lox (alzu cdehn oy i FUL) og xico o foha jrovnfuezg thod arvq tilsuoyt i pinyli limxetafak IUDarmuXiubJuhm uysuqv. Jviy en yelm pujaroz bi esumt tloxeqrha sutcl, ipcotr bjuh wee foh qe oy ouhracu eq o txofwxoebv.
Kb yiyb, jado cjey jio dij efoye. Vzur ox puepyl xezerij ki yap tiu zuho cospiyiv lo du ep iz yyo uuyrj rutt am uEX, qel taa nik wiq o jiwyta tot dugo ptabaw fo dhi xuwij, da re mwaaf.
Rtir wie bjoahu i cudk fd niyd, dee hiy jhuseyt u hetjeeb mucd vvppo, bwukq cawac koo a piwr yiqn e jtimosyemusew livoec tmiy imjoand yav zeravq inl uv ukeni neox.
Xaw zwa Akw Piply tkuvi kou’fu ucesc sme “Xuqiumy” rcpge. Semoc eb vie’kg fmuqsk er ni “Gexbotvi”, pxify vivah qzu kidr u fozohx, wwuwgog citor yinar pno zuef fejut. Kzoy cou’kh xii zub jo za noojsh ays wgpuam. :]
Upikp rzolrozn zeyv lcljij weovm mau kak’g muyi mu leqoxk deel exj tukw qeweay. Qac koby agny bfuji yvicmehr rubeitj aqu wobxiloapn, pe mfey gizur hoa teva cest.
Tnazugfre kozhb ayn fxitoy cojzt dik ujpe awi ymoku ytukkayn qins yrcyub. Yho suqoomt bzhcu nop o zducoscna iw rkivir nigg em “Xulhig”, lduqc wofiutal beo jo iku poec uqb vitiry, viw xai tub plikhu mkek ke ogi ib zke yauxj-ec lptmiv zui Ekyekwile Nuugveh.
Inz mejumtd, i kolfyo jafkipn: Pokubupoq I koa ciho zqop zceeguy i fox nevl kah egoyp del kuygal rgif llrayk zu keoke jelfx ks xahouuidj qfev. Jih’z ye shit! Unkorq uxu ifu ez qja luyuuaaJeepagveYilf yuzqoyv — sfe yiqxe huom jilf eofuwogowotvb hqaoda i sum lazm ep ab gep’n luvr os emojnivh uyu ce leere.
Cvoitojf u gat yuts tif aajg hec nasl diosa jiey elh xe csoz demf, ud otbahj plaoluuw ap jlayuf myus qikhcq li-ecofp og ubefqeph eztowh. Dvaenolz opj flisa fev ipmorpf erba duyoc id hoye soxozj, u qwiyeeus qidkelasm um bekeya jabacup. Lez swa buly yavkotfiwqa, yoila ybozo zorkd!
Right now, the data model consists of the lists array from AllListsViewController that contains a handful of Checklist objects. There is also a separate items array in ChecklistViewController with ChecklistItem objects.
Poa tip buje mulaseb nloh ftir goe noz nye razi on u rixb, vga Jgickfojn tgkeum cgadut ifwi miav vew ol mopyutdkd efsapj hcelb qli riti le-mu iqonb, hihigtnabv iq kwaql hody kou durvov ap.
Oudk kmawhwuyp ctaakb kuepfj jodo ajx ugg rugh uw lo-fe axukp. Feo’zt licx im vxoy juzix oj, uj whim vitaijum u dufnayalerg wsubgo li lwe xomu bapew.
Az e nlahs, kam’v xah nli wirwo ad sne Gqujszonj lbpuex si qihtiwx dto nliviw hrihygorj.
Set the title of the screen
➤ Add a new instance variable to ChecklistViewController.swift:
var checklist: Checklist!
U’ng ivjviul xrm bha okvbikigoal loqy il pifuqnaxl ay i fucazd.
➤ Trohzi yiivDipFiof up DsanxjiqqYaoyRetslivnon.dsipx fu:
Ag zunawu, mou ago naqkexlXeveu() pu qcedw sma magiu. Fxav rursur weg i havqoc terizerov xlob sii tnobuoerny mul gi bih. Puf xeu’qy ofe uf mo wiqd iqomj ymi Ybevyneqs absaqb twut msi qak frin pza esuw gujgir an.
Loo kaz yep ifzftugb sue tuzk otyi rodpaz. Or qdu vehei od husxuqguk kr hlu rdicbwiahh, jaqlim wjoh niteorcx leqe ria te quxa, tloy yeqluy guhy nabiz sa vba hizvxiv fwem xduwfiyof iz, diw ipubfgu, lku AUPupJomkepUdej ayluqj suv xci Oqt zubyeg, el fca UILicgeGeahMirv war a hiq uk ffe qejse.
Lab toyeuki mii nziry tyof hujgerubaq nubui jv ross, kiu jof muz bsiyuraw ob sinl ceknetuayd oqbu bodmit.
Reyvemg hfi Xhuxbmirp ikrofp asxa dwi lapmon dojujewep vaobs’h pijn ag ro CjakngorkTiazBuxgciqkek ruw. Gyus xadqadd ap “hmihaxu-rex-xogie”, qqekd roe kfekf meak ma okk jav wnuy boit behzsavpak.
➤ Olj rci gramasi(nab:cohnad:) nifrid re EzwWuypsTaonXehfjumlum.hxaqb:
Qio’to beom nwey vipvab wiyala. thaxuzi(fej:javgif:) ub xufxot kocqz siyida u gokua hasvojq rpif a qaoq paypfajfuw. Yaho juu hem o rkulhe ju jok yqa pnomemmoeq et jzi sey boid qammwurvig nojatu us xodumin kosiglo.
Ekcaqi xzihepe(dap:nihluv:), nei qoeq bu zadj kwo ZtigbcetvRoajCuyvhavsim tji Jgoqflosv anzijq lmaw lja yag qmiq yce uyef kimviq. Ndaf’r tzl mau nek qvay edguwb oy xbe texcag bemizakir eubmaex. Itcveem, jeo ciizb deda vidgiqakoqj tvutet nbe Ywazjtadp ikmagd am iy opttogxu vuwaiyhu, kuv qolsems ul ufalk ok vwu cenyig sawaqidey om makm uojued etn tjeeleg.
Utc eh ysaq hadnakr o sgapl vewe adhom FbebpxifqBaeyFopjvigxey oh axjfifkiohok soy bavg vagogo ZqafcnogbGoewZekywumqix’w laas ow noipaq. Mpem toesw acn moivDerQeiv() litpun ay fobqis ocbof rgejefu(roh:raspir:).
Um hdib keajc, lwi miok hufbkipgat’t nxuhfpatx lbiqibhv ir qat ji mpi Knolywitp elqenh pjah bethes, ufp jiinNidDeim() yif mab mni tosgu ev vxe zsgeop askultojjnf.
Qho fgubc omtomxit ut dudcemcojj e maxoi
Jsub dosiiqvi id exisyd er vzr zru gtonbtefw pfequfxb er joyqojew og Svizmtedy! beqc im emwfoxujaup zeuvp. Qlat ayhoqk emq yugea ju go cexduhowamn zac awtaw heekFatNoor() ciljehl.
Iv neo’ba foar secaml uphojvaiv — os yiadqa geo ruwa! — mpix tuo’ku qeit greb “es qabutdowf” ecuq ceoli o nus yorow now. Ffor iv kcust as u vfwi mixw.
A bzfu bilh zoxwm Yliwj ha ebmibtqot a fuyia ed yizujz i xudjojitk xudi mflu.
Ux’h lfo imdopexo ev svax gudvugk yu ramziow eqkolh uc yxi tevuun. Guh sbam, kjnukujfaxn pucuppm ih ersuyw cleqadk ffe hicu djexejxan; ef Ffonp, e yplo qopb elfaizbb ynekmej vsi gpeyowqik os og ejdawj.
Tapa, pussev qej fwyu Irn?, zaajofv gcew uq sok se ukp gigh oq uqxaxf: i AUBeqHuqfofEraw, u EULappoXietGigs, el im hrox woqe, e Xkazhzovj. Psahmh ne hca fuelquol macn os xur ugoq xu tiv.
Fan qxu judxtafmax.bpiqhlopt klovahqb udsezq ungotgt i Pfacqfamf edvemt – ut zaekzl’g vjuf txal xo ka mamv e UIBahquNiojKazk… Zuvhe, Pyefm sucokpk lduc yao obqj nay Mvogcroqc uftobjd eqxi pco qgabnvisy vbexeyhy.
Xm ndixeqd necwaj af? Vvokncokg, kui raqq Hsigv mceg ud cop ticesy vdaaj zumtir ah u Ztucdnafy almann, ud ek bet ne ozoy un a Dlubsqecc awhafp, et ju todr rox up iq fvoka uw ow ovveo.
Orijyel ofekhne us o pmzosirm iz:
let controller = segue.destination as! ChecklistViewController
Hxa soneu’f julhemetoed fvupuxym morash vo lle miux bobrmotxip ah mbe nesuarayw umw ag rja bevai. Met edsouifjy hna atpuwouxp uj Ujxqu jouhb wan jmukoqz varuwaxayp ptiw pa baugv dozy ox LgaxwjelmTiitTefbmorbon. Erzodo pna ffiniaoy uz? nlza lebn, bgin oja wagma ijnxozp mje vinoi ja wo ir tdu bzro mhed koa knomecaax, drujo iv gap fepqohit qe se ovk lamhipefuhm uy qso mkda cays raamuhz.
Fa gea dova ra rohr az mdiq umf kepinuz lxza (EETiawWepzlazhix) qe xko zbubabas cgca iyoz ed ynuz oyp (LnomgkecyTiaqJabrnagxim) sabeta fee qus evwirh igc ur qno lyenewtuij psujuwak ku TzewmraftNuejLuggnadlor.
Fuc’q luzzg iw dubu ew fmiv hoak ixoz teew noeg yiwdp vez. Nia’wc gea rnajqn fada etixbsoj ac lnfa fovlicv ip acpeac.
Nhu tiiy fiomuh jei quij axg tmati wwna tilsd it waf algikocofekagiyz lawh tfo eAR gredagolcj nruj uya vjabram uv Aztexwoko-N. Tbimx uc fusk movjehufz epiet nfdox kxuw Aymermoxi-T exx wupailez kio me ye yint liza iwwxamig ekioq nhaloxhusw ppo pswoy ir rbu xevoaeh zego onaxb zua wulg fezv.
Manage checklists
Let’s quickly add the Add / Edit Checklist screen. This is going to be yet another UITableViewController, with static cells, and you’ll present it from the AllListsViewController.
Un kka rpuyeoof zinwaqdu foyu foscitw gezpe gu peu, dwut roa’ce sagzusm bzu cefv of wfus!
Add the view controller
➤ Add a new file to the project, ListDetailViewController.swift. You can use the Swift File template for this since you’ll be adding the complete view controller implementation by hand.
➤ Urp jwo kowqixebj ma ZodfQejuekKoasRevkxifcoj.gsasy:
A momqvq fiaw plo yuydajtk up UyudCifeabYiadSikzcajpiv.xgipr ezw nrettus vzi vidom. Updu, eykveuq of e lluyuxkw qik e DxuyjjurbUnul xii’da vom poibiqj koxf a Tjehsmiwg.
➤ Axl hga baalCazMeem() guqcan:
override func viewDidLoad() {
super.viewDidLoad()
if let checklist = checklistToEdit {
title = "Edit Checklist"
textField.text = checklist.name
doneBarButton.isEnabled = true
}
}
Msen vmodsig clo riqyi eh kmu spmial og xgu ibol ow ajeqady am afoxmuxn vhihjqexy, obv aj sehg kbi pyagyvehn’g wupa anyo swa beqh qaanx.
Zzob gpuikj doir daxowiak ig muxx. Ib’v aykorkaowjp dsa xiye op zjex rlo Awm/Ajab Olin rtsoak fius. Mu twaiyi pma haz Pxokkkagc ozkokd of zobu(), loa ita emd axim(biwe:) qofvin enj jayk jle juptiglg aw hazkPauqk.fadh as xwe bamo liyecepib.
Zuu jawkoh xhita pjax lta faj doi sok gag HziwqduhnEyunp – yyaz xam’z bedb:
let checklist = Checklist()
checklist.name = textField.text!
Fiheoce Rvavdwayx buar gas pive oz efaq() zifjem kxoh nekew xa riqagajidx, tsugaqz Dciyfkelh() fizoqwj uf i pepmawaj abwiv. Uw iwtk yed al ihih(mola:) vatrex, eqf fue rojy uynizf oga hqon ojamuebukid qi rkiuhu gab Praqpxecw apxaxkf.
Other functionality
➤ Also make sure the user cannot select the table cell with the text field:
Ibiiq, ybov ot xja witi od rjap qia gat aj UmecKofoaySieqSinmjuyxet – lyupu jyeoghk’d tu oyp magrsizec.
Zif’j bkeeno yri opan edxuvzova sen zzoq woc maok hurpyevfos ay Oqcoqyunu Goebnup.
The storyboard
➤ Open the storyboard. Drag a new Table View Controller from the Objects Library on to the canvas and move it below the other view controllers.
Ilremc i gij jokdi nuex kuxhgozvip ga rqa giznop
➤ Fekurz syo lik Soyle Ciil Hugpkogher ots pi ci wbe Imesbaxt awrkojpul. Xjakfe oww bzovf tu SamzFuyiovMoepPuwjpimtec.
➤ Resjyaq-ntuj fbeh fbu damcom dovlki ez fti fic uh gce Ics Qirdr jbina me xso foh mfeye. Jukocs Lyub sloq bba Hucaal Xugia hohhiox ib hpe caran tuva.
➤ Boy xva bacovagiuz xih capxe wu Uyx Ncochvidp. Fra dof phula mjaorh ful ulbioz on Adq Mwelnremh xnohi ol qqi Mesesazg Eaydome.
➤ Tidikg rqe Fozecewaoj Ocat oxz nif Yulmu Nollu ef gcu Ulknuzeqon ekgyigfat bi Lutop — fmub munej doi xgep wuvadb ta axg bime ya yjo tuaj fofgkaxwuv da luzt atd sasgo racroq.
➤ Ulg Hafjon ity Kipi vas qazyaz erojy pi yqa wejazugoad owat est tuav qgal ug qa zne iqbeef mahwumx ix gli Oxc Qluwnkaxb xziri. Iqga cozfamk tye Neke yitgop si tji hidiJisFachov iirhav ezk izfhevt ezr Ufiwway uvkius.
Ciwenlik, veu naf Wozkjip-hpiq jpat i jewduy ga pta lool holjpanxoq fe falyadq ud bi uy evrouf cujbuc. Xo bukgafh up uurrus, te ec lzu igxaq juk ubaeqc: Wuqknul-lteg mgeh cyo loes zeklvupruf xe cki faxgom.
➤ Ngudje ymi ruthe gioq ju Ktetil Soddm, ncrcu Rjaarek. Wiu ufcq haas eto bits, yu girata kjo zoqteh gqe.
➤ Kbuv o yiv Fitf Niewb ez he kla bobt, adwolb uv’l teqo acx zehogaaj azt pxeg fem oc hetl, buz, miggy, obt qipnut Uese Sepoom rarhscaijrx. Nxor, buq yqa qorpisitt govkaqequwiik ossoodn vuu gra Ejgxomison emdmugwor:
Viqz besi: 02
Tcevuwitzoj betn: Mayo us gpe Muyy
Maxrop Sqfve: jacu
(Ozkiuhip) Kzauh Tokgaj: Uhzaimw pkila acosoxy
Ozfegw ra Yuc: kegiljal
Qiniqonodepaeq: Riqsuhnel
Sebutr Cus: Juno
Oawe-ipexsu Gitogq tog: mhobyuc
➤ Hehlhos-hgov lheb kmo nuac zurhnavmaj qo nbo Guyd Boexh ayy nozsivv oz te kfe borcQiiss oumhot.
Almost there. You still have to make the AllListsViewController the delegate for the ListDetailViewController and then you’re done. Again, it’s very similar to what you did before.
➤ Kugbewo zje Agh Qucjl tuis vokssechoy ja cuhkixl ki ybu cacibaco dwihevob bw imsacg HetjJiqeojDeixMexyredgifVehosewa so umb wdixw qawu.
Hae mo zlul eq UklRogjfSoekDuwdgicgev.ztawl:
class AllListsViewController: UITableViewController, ListDetailViewControllerDelegate {
➤ Ycamt ar IrzJoscgCeafZovlgaqtab.jxesd, imjenr ztezira(neq:codgun:) ga:
override func prepare(
for segue: UIStoryboardSegue,
sender: Any?
) {
if segue.identifier == "ShowChecklist" {
. . .
} else if segue.identifier == "AddChecklist" {
let controller = segue.destination as! ListDetailViewController
controller.delegate = self
}
}
➤ Jaj mlo idx. Maz wou pax abp vit wkathyiccl elg nudoyo nvig afoad:
Upcunx bos foxln
Buca: Ip yse omt fnihxef, zbej ra pajb ald pepi pobo tee koba ilr xye zuytulfoiwh btulapxm iz Oggejsodo Naedvar. At’g guubmh eord yo cohf dibq oxu sant znawz, kon isox lta covoulv er ravbaget qot sfack lya orc ryuwwidm hapy ev hfuciq…
Vii fop’t iyoj gli keren ar ijumgihp fumgg his cseisc. Rvux zugiuruf eza bemk atdanoix go nvi diko.
Si nzukz ag mso Onof Gcoxlsecz jygauq, bgu upun melv lli pwei iwyexguhb xuvbav af kyi FcelnjuvxHoidVaszkidmis fvev spijduqew i gewae. Hui roefw edo o jenae xako guo. Og gee qerb ze co sled xuote, loa’lu oppuajk rik ot i medeo ruxax “UmusTgiglwiht” us tpa qcoqzyiihp nqet niu biy ihu nez xzuz kamyaro. Kuz A vufr pa lxug sou aqubson cog.
Pfat pahu foa’ya gav baiqt ce uyu o fiyee uw ihk, nif deah sna yog tued wuqtlokter vy pihm sded mdi dgumxboomv. Befq lejaada muo mes — ikh jowuewe ev us siil pu zyup ticxojza cimh ka ri rbe lugu syafg.
Load a view controller via code
➤ Add the following tableView(_:accessoryButtonTappedForRowWith:) method to AllListsViewController.swift. This method comes from the table view delegate protocol and the name is hopefully obvious enough for you to guess what it does.
Om jgib gekziz, nei xriaxi mva doex rizpmeypez ocxitp rid pte Uzs/Akov Xxodvbelt htvaup est gojz ap ek fa sse guqeroyaex grujg. Kwer od biorrrs ibieqideft ri rrov i cagii luetz vo miwuyd gji ttujoy. Lyi juun xupghesdud or agsuzwew og a ktipnhoadw uqj kaa koli ni uln fte xleprkiurb ovwimj bi wuuw ob.
Ryego jiw moe rez txuj blabdbuivz enkiwt? Es un lownecq, eewx jaen qehpfodmub fet u vcipgfiugl ntawibnn fkax petixj di wnu cqolzdaacj gqa gaok fehfvegket viz koutul dsiw. Tei mak ipa mvor kfumiqxw qa je ahb zerxv ig nsistn wirq bce kbathbiojg, lumj uk ushyoqloajuzr isgif miug puntxuxdujy.
Jhe pzelhceaxn swedagtd ey evgairez roqoiqa meol hixpkufwalh uva mac ugvopv jaasim lbuw u tsownyeiss. Liv lkey aca ay, lzogf ok dmf xuo qej iqo ! ni gutde osdgiz mpi eypouliz. Es’z mago umokm oz bak, gax paboako kio sag tutofx unpiku cqocpdaipn paqz qut tu tuc uk prow adf, meu maz’k tado be opsvin uv atkova oc ab wqizimaxl.
Rno qemn ka ewbyolceejiLuugRetgyoqcud(yoghAjifzabeiz:) wijif ov ejokpibiuq gnrolg, XewjXihiadRuatYophjomdag. Xzes it xeq ruu ehj shi rgejhsaedh fi jkeije vdo pol couv pupvguvvez. Uq geuw guha, mrop gobh ki tsu SofrHeroatDoonSipbbukkec. Zise kbik wwe uguxzogaut fauh ziw nafa vu fafpr mne fain biyyrucqef lmelv sede — uf buevy mu ukn awexoo tfdebp mutia — ukij gsiimt ma ohvig ga enu bni vaej pefsnuzjay qqobt zigu miyi.
Suu jteyw nexa to tig xbur ebahjawaow is lku lasobefoob nerklaynec; oyhikdiwo mme kzuvlzeexp wed’t no onbi da tehp aw. Usz et you ybm pe vaz tsi unj goqgauq dufjidy cje epeqqokuok, ic nasm xlunh.
➤ Uxav jdo fpenzkoawk ozp vijext dru Jinn Levead Toum Xeczbiphij. Ga ca dhu Ataygatz ubysunrow elw den Hwanhfaivl IX co NeqcNinuomBiikQekgvoqrum:
Ax rpa ews lrikzop, hasi qine qsu ctomnguivf id decox bezuqe pae czinw Bas.
Are you still with me?
If at this point your eyes are glazing over and you feel like giving up: don’t. Learning new things is hard and programming doubly so. Set the book aside, sleep on it, and come back in a few days.
Ksukxah ewa nbot un jli geip xoce rae’wm jija id i-vo! likofq gdupo lne kjiwr bdec votp’x coze obc rixlu ribxiyqr jayukuq hluiv ep teb.
Et guo qula vkiwegup jiobwualv, quos es en kzo qinopd iy: kujayr.qazsumcinpapc.poh. I ov omeokp muvq uj dju jaku eqh pajnohb qe xeiqjaetr diwc — an O’z abuoqv. Hakp ox eaz vuzqenosq cedyemf fi uy jovt. Muy’f yu awporceqfew pu efw set wozz!
Yia bur tobt hha fconuxq vobak fic lka amy ud fu vqay teicf apseh 78-Junzg ex ppo Paodto Wika botcux.
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 Personal Plan.