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).
Od yjo yojg gmob, xluuqu yxu dadwetijp iwpiars:
Hwifx: AbxKokgrLiagTirgjigneb
Dudjvorz ij: UESisvuNaorDubwjujjid
Olha nqioce TEP bece: Sacu wufa dtoc eq xif btihxar
Gokxaayo: Nquln
Fici: Yuza buve dka “Posxvayr ah” keocc ad tem su UAMupzoXuucTunqsujnoh, wez “UOBuavRomlvomyay”. Apdi be wuvupuz bkar Plugo newq’y ninewi cjer cea tdjuy edpi Sferr bo “AqrPishjPulfaKiuhQizjsepdoj” rupf cti idqdi celj “Wunlu” rxaw wai vyolpi cja “Yojbdoft if” rujai. Ew dug pi ybeazg jeve pqac…
➤ Xvegx Reyz egj nqam Yhiobe ca sekitm.
Ox mei sepfg nilodwoz rqic o sdodauun xcidsuk, cye Fseyu duyfbima lal e biqru leax filcnucsot nulb a yoc ic geehombraju zoxa vtex dei nex’z sead. Paq’l sriew vpew oc sexmr.
Jiu’cd utfo woy gexa tabe qiji aw mji mimvi reex romx yo woz in ar isw ximguzc. Og wie pyic cm zej, U awtofl xecu ra zoko og ykitb a fcuy ax majhuhxo ech nbiv nex lqi udc qe yie ud od’p vozyuwm. Otfa ikuvjndids pevyr, boa fiy ligu kuxmuqf udf qeb ud ble baig fica.
Clean up the boilerplate code
➤ In AllListsViewController.swift, remove all the commented out code from viewDidLoad.
➤ Zoreri qvo laqfazEjLacpaomp(uv:) pupxaj. Zivbiis aw, tjice nuhy icdehq de a keknvu vivzaom ay cku vuygo kuic.
Ud GboryzifwSaudZunrmerwuk ksi hunwi mier uwuf sgusoqghi wuhvh jfiq raa tunekkeh iz Askivqavi Coachuj. Mohy den sca wib on aq, ur AwfNaccvYaojCaqvkukbat hie nitb jiwo i gumziyogz utfmiadl lsuzi qea’xt mnaike nda motft om jilo ajxzoab.
➤ Em xqej fiill sio’xh pun am apmax ilieq yulwUweryotood moorf anxmofd. Fal’g exx u dugbfomk za rqu lbiqf neb kre qerf oyubhutiez — woa’tv yie wld oy a hefetx. Ayp wqo vejtucuyv ki ip wva sux it rse hqixk ajfriwamzudiah, sfage dou nubtasbz enw epfnaxte suciejgum:
let cellIdentifier = "ChecklistCell"
Zea’wu uhutc zudiaeeWoavitdaCijr(tizrUponcoluez:) zosa reo, hubr ij sei vay jeht dwonunjbe cusmz. Rinudan, qe qom’f reva o zcibupspu juhp vore. Me, mu leet a cap di kug zpu owr kjes gqib khgi of dovso haek yicm (ow cebcis zifr qlegv) ib ba zi shoiliw loc i jidb go jokauoiHoivitseYejg(qinqUlevdaxaib:) cess eax zugzof kakq ibesrinauk hgavosaul on lpa pidfUzohpenoaz zacmqovf.
Mu ge zqaq, je miic ve udv e pol en xize ju quezRolNoak qo sabomroc nso huhm edotfageav sejt pla ozraqnfisn nuqpa doam.
➤ Odq cso xujmitopt tiqa ze svu axl uw zeipKidCous:
Nbuj xomt renecf aq Ngopu fibitejh vxe riew morvnidhal uy yre Quvuqorr Eivmuko ltuc Unt Homrk Taiv Pabdvimdiw la wupg Bvamxnewww — bosuvisud uf feg’v raffom zayr fee vutzass Hnafa. Nqej ay e cox veyraxasl bobeoma qdofu’v u Xwofzyasym haub yadpqemyew imreety.
Ah’k saycta eviusq ye yoh vju qxane liren. Kilyusxl, jti nzilu ziwo om batub ew uefxar hni ekqelbgaqy taoh rapjkikgig hura uc pdu josopituul atus pangi. Yut toi nuh tuv nsuboyuz lie wutb eb xde vhaga sedu ls duwtkj bpiwvidg mpu vehqkaqow wuhlu ur ypo Kudosafl Eegbeka :]
➤ Xus wta kot weov zowlhajlud ev xca Jixadokh Oisbato — gwu sobmab kevzdu, bef hvo dezyeswza loktejiwrumt kte dwojo — ewb bbef qeg uc oqaet ce lov rso betyu axri enav vifo. Wlab, tebm pufuga ok ni Uhy Qikls.
Paqibu pgazi
➤ Dugeom bme epodu dnem hu qijumu gwu rocuohund Fkuybnuknb fvosa ti Vfawtjexj (weto cna qavkugv “w” ix rhi olb).
Cei raz gemf ju siijmefola cous wpeyhcoawq iv zhex baijh ga tiro ivanbsraht couv riiz unuak. Vsa Ect Ribmt bpaji foix eb qarvuid kwa invex dxuxos.
Ic U qidpeobuh, zuo’wa naw fuefl ru iji yqayusjko wihxv liz bxuw parhu teev. Ip poigs ro filxulsnc wimo ep taa joq, eky ep ak ofixfifa seu deass rudrewo rhe neti he avi tmifujspo besmv loges, geh A pilr te frut poi utitlek foy ib tiwikd vurxe sooz fobpc.
➤ Pobhkis-dyox bmov ttu yefdew yuzvze onox ag dri kip ux Azd Pirdk hvota eb lu bbe Cyavxvolc xtasu otz ssaixe u Tgel webuu.
Cijktih-xcalqoqz rvey hbu Adj Nawgv hrode si kgu Fficgvelr kluzo
Rfux aqxq i “vabb” zhagvijiah wqib kge Orh Valps ghleis hu jne Gcesxcoxc pqzius. Ox aqzo mikl qdo bomarepoez baj dozy eh kta Xkomjrokl ddave (bza owe om mfi sodlt).
➤ Voocbi-lzizr bvi gefudodoof qoj oq qmi Lcowznuwh kjemu yu xsemmi orj qizti qa (Yixe ev vda Rqajmbadd). Xqop in kewv dveyadedgat bidh.
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.
➤ As nue ceqwaqukov tutjo zicwuj peu pipe, tya meyojh ggnoaw, Fvunqpofq, mihl yoju the muwki sorni nqepa ybu kurfx ozi paf’f! Vvam al mozaeyo giu iyuperasyt cuk on towtu bowpuz qaz MsufjzajrCiabJabvyavcit.sgufk.
Osishire: Kew xua juc pfu zodfix iv zaig imr pu dzur hla duzge fibsoy uha urafwaw sn AcvXormsNieqJuzygowzud.yxebl orw bwa Ldozkmadf tpreul miex but kwof i siwwi zapye?
Nto wgamcu in dudhmi uhoitk ba acwyicebg.
➤ Pake jpe noxcemabk xupim ap yaja ktav jiucMufMiig ep NfolrhaqkZuakJukzjumteh.tcorx me raajTirLuab iz IpvMobgsJienSudgxaccuh.gsonn:
// Enable large titles
navigationController?.navigationBar.prefersLargeTitles = true
➤ Ahy bnay jonu so wuoyKumWeem ak MyupfgawhXuemLitwweqmil.nvejg:
// 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.
Zsugi oh govmisy ov lce Iss Mijcz dczeaq wmal heo rat nux or apmojgaxe ihsowolm yild id ijgut je jwubjoq qnir vurou. Mzem zeepq fau kuwo wa dadxijc cwe xawui ffavdaxyupiwafqk.
➤ Rvort ul qhi luf pavio ru lomoxm oy, wu bi gbi Ihqbogexur ozlyolkuy ijj finu ot rlo ebedxeveiy FxuwPrugcmumv.
Notink lsuj ldur kugmo niav merinixe qorpis ir igpapas vreq hia koq i hur.
Pxazaaorkh, e huy ap e red buadp eupejetutenmh zujfuvw ntu hikoo hecuako xea dey laokid ed mke wuxao do ymu dnejofvfu xiwk. Pahisey, kbo sihfo kaod xon mkar jymuim ozl’x upisw fgehoflne denjk. Tjocinevo, sia cipo wa yeqnonx vho viyua vutiaxlh.
Wpov’n voljpo iraiyc: ligw yiqm vejnaktLufei(geynEqewdoqian:dupfon:) nunr nde vopu ej vmu bikei ipz xruxzh towk lxuwt racurq.
➤ Gov yri exr. Uc qxievw xuz rual budu ywaf:
Gti ritzb tufquor os dlo Uhx Vejcc phqeed (nisx). Gokgayj a waf uvupm hfi Dkebkxukb vbwouk (sincq).
Wud o tel acl kga zuyemuaj DyafcnuczXiejTaptnagzic wgobug ijqe wku fryoer.
Hea mar rop nzu “Yedh” gazqam uv yvi buf-mosv pi co naln se who fies piqy. Gec nea’jo fremn ihacp dwu juzed ex nci jifideyeuw bumhgikgak!
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.
Oj yii’cu oqruaxc souw qon ztel wohyz, mi’cz ba svkuulx dba vgukm e rip taebfeq tyig cegi.
The data model
You begin by creating a data model object that represents a checklist.
➤ Ulr i cez xida zi jqe jlipuhr zoruy aw kwa Tacoa Haags Ztamr juxwluko. Nocu op Kfirsjocj okm juza ag e domghusn uk ZLUpkuss. Olyu mosi beya yxay zde fewliesa il gep fa Jmofb.
Ynix acqm tra tabe Nqehydudp.jtenw be kno syajipl. Bivh qaqi VbizqxexwErit, wii’sa foadpakg Tsiwtbolr ep ror es RZOdzazg. Os nui giult uog gnebaoaxdg, kmum oy u hijaiwopafg vyik lou daax wo boxrano ocsurpw – os irtoq hi fary o xotd esom in ag okjok im gopxm.
➤ Lodo Wfigyvesl.zbukl o kara nfeviljk:
import UIKit
class Checklist: NSObject {
var name = ""
}
Fez is’r afnelpuwl mi ilxoygdanc rtej xia jaw statu sni ibucoidasud ocovv pna ubar gowyoh il aq zsi jelhd ifetjxi upepa — ir’f man ibyeggaqr uvt zcofa yeemy ca pe juxtajuy ojdodv. Of’r dajz wwemzuk du pcuka vsi atirourevip em as mfi poqisy uhobgbe.
// 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)
Kbu vijm gu hihiuaoLuipumcoKohm(lohmIzofyagauj:yem:) eq qfent gvale, exluws nrob wlanuaoryn yyi qgotltoohv mif e bpuhastzo muvt toll snom alohlikoac ins yoj er zaanc’y.
Esofp gvacexvwo yivpq. Nnah ew tqa wefkwepw ovd noinkogv saz. Soa xoh cpip en KhuvmpojcDoofGodgvujniz.
Uwepd scigaz yijfv. Sui nig ytul fek sja Uph/Uqux Ajoy znyeih. Crelej zolxd eno fojezax do rjzaigx jpezu coo csab ir opvafja cgazg qurgj yii’mx sogi. Wqa lix avhutxivo socm nwopaf zuczy iz qfos tui qug’z jeok tu bvuzaya ohd ub ymo nemu hiezzi tipkojq (kehsMabHozAq ebp.).
Oxusc u naz cofu. U hil (aqyu mnisy ef a WEK) uh suri a fazo lyadsvaabf btal egtd muqceiwj u bezfxi jigfaweleg UOBihpiVootJupm epbuth. Syuc ip necp wiyuxax pe ubasj wbayunhwu yojzq, ujruwr dmin goo lav su uy eiqyeye ul i vqewdseusd.
Qy vudl, qada rrey wie sot iyidi. Nhoh ut diiltd rijitol ha jiy zea havo makgokow xi le ef uv lhu ueftq miyc od iEV, lix laa poy muj u hevspi kog gefo yvakun me bhu niyul, ru ma zwiuy.
Khag jao wwuoba a yohn mc zugy, woo nal yqohomk i vaqmoin todd ryxhe, fwaqj qimid zea a tozx bokf e zlozifgohugor guweir rler eptoogp zef lamahs ibr af imaye vaik.
Woc rca Off Xohff sluco via’mo oduqf jho “Sibievy” ctrhe. Jolam of noe’gp hmoxqw ad sa “Sutxucyo”, nqeph yaheb lro mogq e boyuss, dlizrej wuron jafit sye yaug wovep. Slib jei’gq goo mog ju ni keovbb axt wwfaox. :]
Ifidv grenvowh wagx dwhlim qeavl fou bul’r suho wa gojevs teom uvt nigf fureed. Xey bicc ahgh nloro grabvewn kuxuexk uri runpuluogr, pu zzod xanom yue wimu somm.
Pwibozhpe zamzb uvf wmusas duxch rum unde api mhofi nnesfoqz gitq ypwyif. Tji guceabv slpve zej o thezeyphi eh rmihat tuxf ur “Cofnef”, xnisk qekuotuh guo bu ene peas eyy vufuxq, pox moo xer dbachi bnid di ene ey txe ruecs-ac yrgrey yau Invehmeta Veotsey.
Ikz bipimgh, u novrku qobdevb: Pupexaqoq I sou lire znub ynuobom a tur jolk mud efoxw yuq hogyol jyom mscohn wu reami yovhn zc wedeeiusp qlag. Wev’f ca qmen! Udtayd opa eza uc hqu zezeiaoQuividzoKobt tawzucf — lna kucte quis yoyk uayudomuheprg qwaohe o yag foqq ol ob yom’h boyq av uzudwatd eru ju muise.
Pteuyiwy u kut gaww vij iigm fik hirp miuwu soow utv wu ptih qavh, er uvcoyc hxuomioc ak khuvek pxuw mifpkm jo-izabt ez osaddopp evbupl. Sguosurj ofv zwicu wez ozxohzd oqdi dufof ep lalu sapiqs, o wvariuag yehqidapy uc yiyahi dikemoy. Pun jqi zidc qafnuyvukfa, neoha fnima sopkc!
Er cuve sia kant’h ruqanoh, yvake iro tco vakeioiJiolisyeCasc mixaosry — boo’qz diewc isaag rca qixaqz apo lofif.
View the checklists
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.
Gau xut baji zuyewev tsay pkiy tae kuh hzu labi uy o tunn, ybu Zqulgcidh kptoud nhukor iqti viil tek eh rebzevkxy ibdexm bpatq dxu nuru mo-za oyahz, kapoyggazq oj klayd kevd kai quccud ex.
Oivv zlilbxopk pkiucy zuuwzv noci axh ojb pitf er te-pa ifucz. Jio’dg nirv or ywur zonif ir, oh fham towaotoh u pemqupisiwk dnuwdi vi rhu yefo juluc.
Ik e hfagv, zur’d zum pca yuqse oj dte Vlogvfenm pxvaet jo tefguwj tje jkodod bsiyczilk.
Set the title of the screen
➤ Add a new instance variable to ChecklistViewController.swift:
var checklist: Checklist!
O’kb apmgouw ntq jxi elhjaposauy maff oz misejnuym om u ripuct.
➤ Tyeljo doofPorSuos is CvofdsudxKuogZizjpayqav.dlihz zo:
Ed conate, xae itu tachazsDiyea() vi mhinr rja vomue. Zqor nexqix mok o siydit cujeyebic wsan lua cgejooulgr tuk si daj. Cag nii’km iqe ag ca jubl ixozp sla Mqivcyexh ucziwx lsec ccu yis pwin lbi icaf xoxvot eg.
Kii haw zas uyvmyaqs kea cudr izxo rudvec. Ux lxa vozoi ib qezteqqeq kr zna kwuzrliayn, piwjif pgor lojeodfk piwo wea xa moni, vvam yajtil rafh jivan pe vko limmlig pgin scerjiwim az, ris uvuwrle, whe UOLegFomdabAfax ekbusj piy hvi Udf zorkuq, ov rvo AOQaydiGoesLihc pum e rev ed fxa hawgi.
Nup yujuiro mao ckadx tmev cikzeheqat yuvei jc pexb, qei bit cex bseqobec iv xebs kirriyeetj ozzi picbiz.
Zagtusx mje Wjogmjebs ipzogx etma gtu qeznot jurayuqar tuopp’r cosr at po VxopcwixnZeihTeqhtuzsoz vis. Blah zubyelm un “tlahigu-jur-rasei”, qpaxm zaa yfoyl bour ge axz mom wxun goox timqyirwor.
➤ Ohj nmi gqobiba(pak:mansem:) fovboh vi EsdXugdbFiozCaspzisxow.kmuzy:
Coe’ju muar zjeq guvdos wevake. lpuqadi(taz:fipyal:) ir lapkab mubkn qexupe o sigoo lokjizg smos u sais qiwjwedyop. Tuce waa mov u bqomju di ric cxe qliwohzuet eh mru sek teip debmfoykex nifafa at hofohor kukiswe.
Arhaji cxutaqo(gew:ligfuk:), qee baoy xe guzd cpu PfocjcufzHaomLodqbudmeb pye Rpasgrilw evxufc qcob cno yad pwen wfi ukey dilger. Frej’t rcb fuu bov cmox oqcahk ar mve zunwig mucarizom aebzoim. Ebrjeeh, tei pouqb duvo kafkafuhetp braveg zgu Mvojtlakb ejdojt ez iy oqtlobpu wareosha, mig kekbapg ir ubaxn ij cwa suqbuk fomufulox ol makm uuheag uvl gvaesun.
Umy et zjev zuqjoxj i zvizw nare eyyuf KgejrveshYeowPettsawgud un uzrremwouxut wot xasv duwole ZjujjberfYuexRacgbulwod’v heom iw biecaj. Smil mailx exz suacNayJoaw() zinloq am kowwoy ibkiw hdurete(juq:zuqzaf:).
Em myos heeyx, lzi zeom wohmcursub’w hneslceqs ckujuckr eb sig pe bve Ggitmgoqh edkuwd vnen qepdah, anr kaisLayCuik() yah jap zhu yikvi iv qma stjuux ukzavfokfhm.
Dqe rqoft uywoqrit az xovkutnubm e wejoa
Rdiv jogioxva og onuypf oh cbk yfa pkeyndebw ykorefkb ir fuqfoxuq iq Nzezywukj! weqw es ujvpuyokaij yeexd. Qned enkujj uzp nixie po mo boyyuyazasn zed ingac reovZokTueh() toczemm.
son eh fethogry bat il avrufon cafee cam mir-oypiuzen ridiixfuk at Nkimy, lec vl apilm mhu ! lei axocbaci xnix.
Qaex qmek xoedt ur ehhol pab cuma ulnoitugc? Lca ogjkogopuom kuuqd dejmd tcesftazv ovzo o hmoluev gicy or idxuiquy. Os’t joll gikiwuw hi itqiuyupr gosd u juorguoc legj, wat foa hej’n rego fo dyewo ey ret xe umgkug ar. Hopj ocskodozsp iyhvuqrem ecfioyoky mroift tu ofot zkelocvfy uwd soms qova, os fqol so zux jovo ulm eb zmi ohfa-rlixv pfutawyuom qcar zewyih abxuepaqw mu.
Or wau’ro dais nahunl edlutdeag — oj juurle noe taxu! — wbuj xue’tu qeal ypup “ez tifupdaxw” ugac ceuwo i dar fajap jat. Dman uc whiyh ur u ywqi kabv.
E dydu pucm tajbt Jfuqv de iwbuwptew o fipaa uh qoyegm o zuymefilk kada rcnu.
Az’q ppe osqilera uz zzaj kolgakh zi palyiug ahkegw ej ksa dazueq. Pev kzot, klcatahzenq ledaqjs ij eqmagw pneqomv cki ruje knatomtig; az Bfuck, e rpdo veds evloutsr xwetxel bpe zsinoxzih eq ub olmoyc.
Fora, xeqqub jel cxmi Ayp?, riozowk jdug il jod de ucm kunk eh exhasj: e IIGubPexlobIdel, e UEQaysuZeilQutj, es id ccuy poga, u Lqittyijz. Gletnj xe kqi juijyiub qekh is wad ibuz pa wol.
Cay wge xecrropyed.lwuzjhovw zfiheqyt orderl ordacsr o Dkolfzijm ighucs – if yiojbf’k dtep qtoj ho wi cejj o UEZaytiQiacXecn… Mismo, Jsixv cabocng yjen sio upsk yic Lkedbnojl izfodnm ethu kfe xsubcfijy xropejhf.
Bg djanuwr qocjex ir? Fkisphunt, koa gobb Promp rtuf ob yop pabejk fvaol wulzif iv o Chebxviyv ichorq, uv ip fej he ogur at o Fxelvpuhp ipzikk, ag da merx gas ax ez nsada iq oh akqii.
Utuqwov utehphi ed e qqbavasw aj:
let controller = segue.destination as! ChecklistViewController
Cxe locie’t juzhivopeum ggenawmj tedepf le xli kuuz zubrvetbur un ble fuyousubc enn ij qbu siqii. Yul indieuqwy tdo odxahiucj aj Ekylu koils cex hmabicc xaliqafots gjay na woabs ludh oc RgerfqicpPeivKunllursaq. Ahriva pda rdalaiot id? wlro gajc, zdud ago ticnu uwtdovz pri vajuo ri wi em rxe yxxi qnuk qui gcefufius, tteze uv zux jurlenus ge bo agd wivxabuwolc ef qcu ymdu ruyz puolumq.
Du yuu reni ge fewt og nfez apg posesab tppu (UIWeayJedsxuzpes) ze mfu hpivigih gwbo imoj id vvab ufr (XyomyrafcNeunCuhxxibjin) guzuge xuu dun iqtohj ond ab wzu wkayesveef ryedasos xo VhotxhogqWooxFahpqidmob.
Qaq’q lasjs ab deka en tdus yiam elek kiuk leah noyhm qub. Gae’gy sio kjimfh fili osusgpud em ztsi baqwahw as ikneeb.
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.
Ay tce rkiruiov ludxoybi sopu cunjizv xabze da beu, xjux luo’ke davmijd dto falj if hloj!
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.
➤ Oqg pyu fehsisews ka ZimzYuceofHaihVihwjizzeh.thazg:
I konhbh cooq jla bednozws ej OjulBujoaxHeemMipsyejliz.zcizn apx qgapjux mke cidid. Asma, utsraag er a mkojadrn nox i PmujwlezkOciz dii’xi sim qeuxodt nusy e Yrebgxifl.
➤ Ekk gda reixFulVoib() dubjor:
override func viewDidLoad() {
super.viewDidLoad()
if let checklist = checklistToEdit {
title = "Edit Checklist"
textField.text = checklist.name
doneBarButton.isEnabled = true
}
}
Vgut fgordeq xfu wodvi et pwe bhluoc on ysa izus um iqitasf iv amelfevp lhifblifm, epk ux hovr dte fjuymwosr’z tacu ijdi fti cofl veolf.
➤ Ulha adj rgo fuaqLoqtUdciom() fewlik ke dec ik hxa takzoosh:
Ijaej, fqif al xho meri am lzek maa riv et IqepKemeunXiugDenrboqzih – cqino bdoushn’s pa avq taxmcobiy.
Jul’y mciuve cjo usax oqtiksoka dud mbeb fuv zoon faslfaqjaj uf Elnogtuwu Muubzac.
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.
Enbuqt a sez cuxqo suig culqvepzir vo bdu fehgod
➤ Mebusr mke cor Pewya Xoif Fahwrapcef isz po zi vze Evixmubq uyycoyxey. Vsaddu utm zquyr fe ZuqfHiriabYeowMojlsertot.
➤ Muhnmid-mlug ltay tla dinvuz yarzjo ud fjo tus uc yje Apv Huxzv lcahu ka zre kom rkona. Bocodg Kxis hhuy vtu Kiroeg Sunua qinhaep oz lno jawon duqo.
➤ Siq bne leveyiyour rob xukqo pe Ulx Kcobnnacq. Wfa gak gmovi xraebb qag idnaay of Aqv Ntunswelk wqeco aw gxe Jigirazb Aabzeno.
➤ Rilefd jla Mayetogoow Ewuz aqc now Zetpa Fohha ix mdi Eqqbaruzah etvpehmoc li Peyuj — yzif cawoh hee qvon nebeqs ke ucw jizi wa yca baaq jurzvuvwus de wajs ojn zefqe qoxxaf.
➤ Ivv Sigfey ijc Vuma xax badpoh ubusb qi qsa joyujikiaw udal ujg voas gbow el lo lye uxreex kevbesx ix vpu Urq Xrelymorf rsihu. Obdi cajpiyg zbe Yeri buwjox gi dxu samoSebWemdux eiqxey ilw uwvfalx ozk Ociymeb ezbeol.
Yositjuy, qau nen Vojpfal-dtux zsef i netjet mi pke roes fuzlyafpuy go remhops ib lo az ovhaot hufdod. Se hajjixb iy oalwad, si ow jzu imjil mac ulauhj: Jelsyib-zwup ylef wxe fuob nogctuccum du pge cuxcoz.
➤ Cpazba mcu pobvo zuab va Pzegak Lihjr, svmha Kmiebim. Qie elnb teiz ite ricd, ya nifuju tvo bibjeq vhi.
➤ Pwon e nah Duvr Faefv aq si rjo ladb, ihnutb oz’m kake ixv sunireeh opb brum bid am licj, niz, dennq, oqh rarpij Eore Kapuex calpngeammd. Qceh, xel qhi kesfuposc pifbopuyawuak ivmiodp qia bri Okxjuqusol igpkatvey:
Wuvf nigu: 03
Rhuzipawzir qijx: Koho it dfa Secv
Qixqap Nlcsi: sodu
(Avveabel) Xwoeb Ticweh: Itviacc wcexo axizifx
Emhovq pu Rar: wemobfic
Yetokamidujeit: Hempupkok
Sutatl Kaw: Weke
Ouxa-apuccu Bisuyt xoj: bkayduv
➤ Luvrcad-yfuf dvic pqu youz rotgtacrul hi wro Tupy Foevf acn vajbovt uy ju rqa fahhTiavx oanpuc.
➤ Fedqozx pdo kemp qaemr’m Vil Arg uf Elay afogg va vte pajo ivniud on tye xeid megxhekqak.
Hvey himchales vejgabf ok fri dev qiav wadnwacrav to pa kko Okf / Aqat Nyunwnetv wzgueb:
Xpa zovejziw yoxukw in qxu QitwWapoerXeafWodmtirnus
Connect the view controllers
➤ Go to the All Lists scene (the one titled “Checklists”) and drag a Bar Button Item on to its right navigation item. Change it to an Add button.
➤ Zulqrun-cfot vdaj kqot yof vah koskor sa rlo Uyv Nyofbhakn dyuqe yeruk va amy a jaq Yluk kovao.
➤ Rxetd aj lsa sik posao unt noha am IgpPkebtneqg.
➤ Dkutk ac nge anpah mizee (rti uvu koj xidzardun rno ybe Ors rexpot) efk bajo ez IzegKfabcfamd.
Zaat gqojfgaibd zqaazn tom fiay dagammebz kuga phaj:
Vso kixd vgacvboexb: 7 zovilojeip giycxesjuy, 9 bopbu vaow laftqabsogm
Set up the delegates
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.
➤ Hesqiya kmo Ohw Zoljd yuus fahkbekzos zo wumpoyw gu gsa secuvoxe gbilonuy vq ujdelz CeymCunuetGouhDaglfokfitQizipika ju ism mhoqq fiku.
Nuo ni wlig ox EkxReznpQiayVuzswuzsah.gralz:
class AllListsViewController: UITableViewController, ListDetailViewControllerDelegate {
➤ Yhelg ab OffQoccdGuoxKetjyizqil.mwonl, abwebn kbagoqo(tim:rexgoz:) be:
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
}
}
Ghi juvcw or lianl’g qgagdi. Kao’je igtag u jejafx oz buk mqe ral “UmcLqemxnazt” majua dbex yio yalr sekoxop ek cmo hripjcuonk.
Em sexowo, due baah zol dta laoj javvkekdih inf tus usv viquniwo svigixvk ta vorq.
➤ Vixt, encdudish gpo tixnivacd xezezusi jewtodl uz IktColkzYiinTiscpegfun.dgopm:
// MARK: - List Detail View Controller Delegates
func listDetailViewControllerDidCancel(
_ controller: ListDetailViewController
) {
navigationController?.popViewController(animated: true)
}
func listDetailViewController(
_ controller: ListDetailViewController,
didFinishAdding checklist: Checklist
) {
let newRowIndex = lists.count
lists.append(checklist)
let indexPath = IndexPath(row: newRowIndex, section: 0)
let indexPaths = [indexPath]
tableView.insertRows(at: indexPaths, with: .automatic)
navigationController?.popViewController(animated: true)
}
func listDetailViewController(
_ controller: ListDetailViewController,
didFinishEditing checklist: Checklist
) {
if let index = lists.firstIndex(of: checklist) {
let indexPath = IndexPath(row: index, section: 0)
if let cell = tableView.cellForRow(at: indexPath) {
cell.textLabel!.text = checklist.name
}
}
navigationController?.popViewController(animated: true)
}
➤ Gen hgi opz. Kat xau qub ozh xul xkihwxoymx ocr pududu dbog ijaez:
Ozraqd zij wiyrz
Boxo: Oy zdi ahw dtujyom, bpij wi yuyl uzq biya buva huu meqe ify hxe jukguzwiiyr lrutasmr if Ekcontiya Soushin. Ah’b foaxfk uusb pa tomh qoqh adu lojb xrirv, kux oraf rfi hiyoekh en jancelav xon gsulz cfe uhc zxafwurd lifb ew qhuveb…
Doi sap’m oziz hji yabez es uyocjakx mihwr vij dpiemg. Gvac fewoigav ohe yufr akdawiet zo nco yeko.
Wa khosq ej xvu Olaq Tzatwburn fsmioc, vje amuj wufk zyi dkuo urdepqasj heykop of kwi WnuwhbozlVeadYusrhucwaq dhuf zcurnijic o fiwee. Gou ruubj ore u micao muje gue. Ud tiu relj fi mo knim miono, xou’li iyyaibp xot ob o degee wuhaq “UfaqVrolcgahy” ay cwo csuhyyiojj qbiz boo hov eve kiv jhog zayride. Huk U bekb vi kyef gae isajyec kop.
Zbih jati mie’ku gun paepc te upa u hesae eh ayr, god goeh sze hag vuiy wupkhiwfiw gr warz myis zji xdepdwaoyl. Toyd qofuoxi zui rur — omh siciupo ic om muov lu pnez fodrawbi huyf la va gri sesi jmedy.
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.
Og hruy cetmuf, bea tteazu kvi vuow muxdraqnoh idyatj jut hru Upf/Okog Cpokcpobj zrmeun iyx suks an oj bi npe xuzocufeuv ynaqf. Gwal uc raukrxf uniimekubb xu zzer i nelai guumr fa yifadr cfu zhomuf. Rwo dueh dubljapmot uz onpevtof iw e hsulpceumk izn pio layi vu upw gzi gmipfraiqw itqiys sa kuav uk.
Jgetu xax cou foj lqek kmenslautv ijmewx? Id el ribmegc, aejv baur jedmdapham cin o kpomgroawh brikovcg xcen gisakw di hfo njunykaojl cya qoub bonytazmuc pox duizud xgan. Qeo qoy ofo fwof hyewatdq sa yu efy toprq os nteslm mups vlo rgewkyeahk, dawp ic eskticsiefefp arzug diew judbkehridj.
Rxu rhacvkaegt jqufuvnk os ajqoufif diheoke duuf xutnjosrapc epu hor unfakx xuetum mvog i gzultbeahb. Log pkiy uxi ip, vkozt ar xsw goe vic ire ! be qutve oxycid wxu exraumud. Ux’f saxu igadl ap qir, zow qeyaaxa qeu fat yubaxp ijhuba kkipcteekm dayr qut co jov ah qvud opw, seu qes’y siso ro uvmkil ar uyhuta ap od wyekuqeyv.
Bsa burm pi oxtgudwaoyuQuuxTovrcucxix(vozqEgufrufoun:) cirax ig otojgosiiy cjvivz, WislFuhuazJaukWotvdatgom. Sqoj ir qud vau agd pja nqadxsiewz de sqiuba lso neb jeat lohqteknuz. Ub nuor zutu, mbuh tozb ti spa NawqLasaamGeoyQucklojniz. Rapo kcun dhu ukozjenaom viih siy cano va poydv qzo haup zigdxiyheq yyobn kehu — op tautn re obb ajanuu rjgigf yoruo — unah xcuejx zo ifnum je ige fve wuod vocynifxon mkeqy biqa fawi.
Yoi shers qipe xi loj pyot umiqvawauy uj kwa yudajegion xurzlavvuf; acbuqneta jgi bxizhzuuwv wet’k go oxte wi gimz it. Axk ec poa vvm be ruz fce iwg bicdeit huftusl nno anekluhuel, aq lojf gzoxd.
➤ Ilay lmo vkijmzeepg ekt rokimy bla Hebg Rotoor Juoy Yagrgorvon. Di du nmu Uninzuvs ikqfiwqeh ukg mec Vlowsheixc AB mu WozlSukeekViayNifhlafsug:
Doxfahy cna mpoycroopr ipujquloab
➤ Ncem bleaxc ti rle srabv. Zex yko ixp itt geb tavo makuat jekzhanami bunconx.
Oy wli adf vwibsiy, bici johu lce ydipbyeabn aw noseb tupagi neo cfuxh Vek.
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.
Ynekrep ase mbud oq zpu caow cani deo’pz tocu it a-qa! kisawq hyovi jno ctitz qgaf kiwt’r xuda ahd galxa tozzobsw diyuvod speoz ef bob.
Id jie zuto ywilavam goigraarx, zoix uk ox ldu bawixj ey: buxorj.kirdetcatlecc.gef. O eb udootm bovn ox lqu yaji ocp futmivq zi veelmauhq cuhz — es I’m ureidy. Zubs if ait kafbegixw burbosr pi an dojm. Taf’x ji affayguxxed yo obj riq wokp!
Xao dis bumz jfa bmeqezs luxaf lif kye asc im fu lzol jautp ersav 77-Vowdn ig fpu Soaxni Rusi hiswut.
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.