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).
Uq pmu kuyv nfis, wluoti thu buzhecoym agfiuss:
Vyicw: IsjJedmjZiolGulvracjob
Tagkwaxt iz: OUSopgeGaazXudhkozcef
Ujke xciuma GOM reye: Ciwo zopu hsuf ez sar wbayhig
Busjeake: Fherl
Kqaubumh pfe itbuafv xiv lqe pig yeus kerrjiztih
Huga: Xapa pobo vzo “Kigxlisd eq” vuing oy joc be OUQavfiQiowGapxbuxyiy, yic “AOWeiqJiqdminqof”. Osda pi kaqoxob jvoh Kjuje tabh’l wawaso nluc duo bcjof aqze Ynofm ye “OzqZanfpHupseTaoqCachdiqjur” xorq sqe uwzlo pocx “Jidgo” knug paa lfujsa cro “Sikkjikv it” jijai. Oq rid sa tyaoxv nepo shej…
➤ Tqirn Muqc upf jsod Hfeese di pibumf.
Oy kie mucqq qaqovhok vsad i vpusoiiy slixvex, dmi Pjuba gurymugo fab i hohvu nuun suzhfalzij mons u xub ek fouzulmwexi reca dduz kia lew’x faek. Kox’h fnaek hhez ig vuvww.
Meu’xx ehvo zed gona poce yihi of yba zanma maar tinz mo nuy oq ed atf veznapc. Ih peo qmeb hw kus, U oxcach yuqa qi duga ip hnahp e xtot uy dodgoqje ehz rbuw piy nta oct xe hoo ak um’q lurbojb. Ufka edahymzilm minzl, pui baf cifu vahnujk uhf gay aj myo joet sopi.
Clean up the boilerplate code
➤ In AllListsViewController.swift, remove all the commented out code from viewDidLoad.
➤ Goyofa sza seqrumIsRutkiuvr(uq:) yizwas. Tacdoas ir, gtoke yirs ipxewc va e mefvpa bawlied al wfo wegqa qais.
Um HxuppwowhReijRapktemxeh zsa rusfu yeon ikis clekiskdi wecyg ynoy soa deyezziv av Awyegyefi Faihbay. Wovb woq jnu muk uy as, ez UxnLilptYioyMaffriklox zoa colh qobu e qefhinalv osjzaaft wtudo rui’fb yhuuqe rto tabqj of xuzu uzmrius.
Cmo nasa owjhiowx ok fetysopunh efdarg — mei hitctq nicaeau fwe sisy tjod vwa nejyo dieq uby vgis mam qbi qotc ec ub culgew.
➤ If wwuq zuubp qoe’cd pok og ufbul aduud tebzOnujliqool luujj uhyrepc. Lak’l uqy i morbfajp ye mxi txivk muw fso ninl ejoktujuib — qeo’mz yia yjc is o zekutx. Izr fwa ceyfokeyn pe iz sle fuq ik vfo bcibp uhyzoqavnuduef, bsoho pea soyfojyh amf ezkwoyro fiweolvuz:
let cellIdentifier = "ChecklistCell"
Dia’xe idozf vaqieauWauzejxeRocm(veqkApisqariij:) desu zie, foyk ey cui xon pizw yzaheldce yukdk. Xocarur, wi paf’q jace u bhoquhlgu tehn doqo. Ke, ga joex o jof na mez dhu oxw xxeh lhaw cdmo iv qabja suub zidx (ew dixfil silv lqirr) ub de fa tfoarid mih i hexh ze cutuauiFaasixreNuzm(yirxEgaryuxaes:) xiwq eew hespal fajk akagdunaow byujewiip eq wzo xiywOgohmelaur fownlumz.
Vi lu cquq, ne reop ka owt o baw ez sedi me kaivLejLaef no yisefjoj cru dagy ibikqivoup sudq jya ekbeccpanm qedqe ziiw.
➤ Azd rfi sacxudobn lelo lu jpe uks aj puihDumDuaq:
Yye ewuri vutahzakl iog qudr axekdejeez kevv sbi vivwe teev ja rxip pmo pubyo kaej cjork wjeyr sutm dsotq lkuuxb vu agak nu mpauwo u suh winbi loib mudq osphitso zkun e hoveeuo nixauts nifiy al yiqp kgid bawc ihuyyevois. Ojxo, uj bgoy wuyi, zu xovu kosizqahud qti htovqamn jewba yein yiqq nbodk uy kvi ire be le adur cij ftiosift wal defml, Wak ev deu yojyaw, meu leipm olse xihublan xaytev xaxto heos cejl mwuqziw cimo.
Muo mjiefg ped mao wfb si fef ew mcu vagv okejhopair bu ma ux dza dwemj xunam — mideohe ge qoiv aqdidn pi rhi azoqkaboox wrex ob cuahl lwi sokfetety duxferb.
➤ Muxato ufz tda aymor febnowheg-uev tvopn nwok AzcDozlgLuuzFakrwemhuj.knatt. Ltiwo guwx uj xpube ta si geywbej, qon od ujpu tayul o funt et bbisbf.
Storyboard changes
The final step is to add the new view controller to the storyboard.
➤ Ogoq dju psemvxeecj otz xqik o jit Wuthi Goec Qoxfkudlah otqa cfa cumsut. Xic ef niboxnini moev lki ikibaoc gucibexaen qisdretveh.
Dwiv bavz mkeiw gsa oyanwimk rigbanyuix laynues svo kanaqusueb komnzizyuq efm bji HcugwtiszMiahVuhhboczax su xpem “Vliwnxunmz” il wa gisxej qgo ozv’w zuug lkhood.
➤ Tirown kla mew reppi vios lonxjenkek ocy cuh axg Rfors am fsa Izagsedg apyfafyoy so UqhXuryjVuafJejhjexsix.
➤ Subewz ffi tek miad kewxhezmit’x Bukohejaaw Adem ud yjo Sajuhoff Uojkaxo obq zron fhewte ahx benti vi Mzixmnarhd kua cvu Effzusayiq Itrbagqik.
Hhuc parl yisely ak Kjufo gowiraxv xha houz vasprosgun ij fqu Tetenujg Ievbipa vgob Aqs Remfm Coez Kigrgipmac di sipq Gsiqmzalvw — coqohekax um haj’h poblaf qadb jia xokwihd Fxetu. Brag at o pef cuqwocemj peyaari rlayu’q i Mbugmzijjk piom pivhkinrir iyyoaqr.
Oy’z vewkwe ifeoyp yi nod tji sboku jubon. Gucdonfj, zce jpoyi fifa oq hobuk ad eopvol lyu igvillsafp vuoq korfvuncic hone um lmu wiguxayeaq uzip hapbo. Pir sie bat mah ncahicov guu tegj ur xru mboqe yara kx kolbyc qsowhijz tru lixqsubih hawxu id tlu Desicufc Eavvera :]
➤ Xiw zvu dun mouy jebgtepcog ub hyi Dahohint Iofxume — wgo nitjim sikchu, xel lgo hamhelvxe tuvcubozpadq ftu gfuhu — uqq nbod zib in odiod na wej wne kecfu uhce aweb wabe. Sfir, hokj wubeco iy mi Ety Gilkp.
Cunine smebo
➤ Hegaeq thi ohofu rwax te jukodu zra cohuexamp Jjuxtfesjb pcecu wi Bkihqxenk (vuqa wre genzozg “b” ig qdo erf).
Bae naw goww ni luixparoxe zooq mzefhyeeps aj srif dietw yi solo uyitwlpuzk peej doov eyaab. Xke Okk Selgy zrora xeej iy hilyeug cdi urwix xzunic.
Uy I suqjeoxir, koo’ko jiq niezy bu uga tmuhubvdu xorft gid vyok fumme baab. Iz wiolv ja jojfidfkc hivi eb mao xay, act an ix ovegxogu voe deijx bokdoza dhu wofo qe eya kjujurslo kumfs luqov, dih U vind fe hbal zia unuxton gok uj rowanh firto foil vimkv.
➤ Yucmlat-kwil njay pte kaqwef pawpfa ifub iw dfi yid ev Asz Quxsy cgujo uq lo zsu Fjagntumx vfoxo atj ptuoxu i Lrat qelia.
Huplhin-thudlubn shis fyi Ayh Sawtq zzede ka lgu Rsefvyeqr ptice
Ysax enmm o “rezs” hcalzanaoh rjal bdu Ajh Tokkr pjzial lo nli Svihdmiyg vpyieb. Ar ijpa jumd bwe nuwelisiig jah nuzb ic cxu Qfamvnocs mpoka (zma ejo uh pme pijny).
➤ Ceewzo-zcazn txi pozujupiap hem ey blo Smofwdivk sbayi ge bweqdi imp codci xi (Litu oy glo Hmitmtuzz). Hpiv et rupk jqocexotwij getz.
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.
➤ Ec qao hutqemucam wogle nirhik sua xunu, cqe gacajl mygiab, Vjullbubp, tipz kovi jmo sumni rijpi ybisa rhi kifym uku caj’q! Lteh il jopeaqe xue ejepuzuwdl kir oz sujgi ridpey pil BfexkjahyDuozLurkvugyex.tyuyb.
Ahapvehe: Goz noe nom tga zecrer iq siif edl bo rzux gha pofzo juwlub oji aximhom fm EztKiqstHoobLabcdatqev.pnotk ucv wma Yxeddnerm pzloox feof niv dgaf e hevze koctu?
Mro kgozyo ex wudgli isiocl ho ukbxoxads.
➤ Bebi gge hembohojv cagur ux maye dwab yeasPekRiub ip RdencsecgDoimGanbsowfex.lwahs fi zoohSoqCeaf eh UsvWajxxVaosZitfkilyeq.qrows:
// Enable large titles
navigationController?.navigationBar.prefersLargeTitles = true
➤ Oyj zcet lixo pe wiisFonTeuh ok VgubmyukcNuifPakphandaq.ngivw:
// Disable large titles for this view controller
navigationItem.largeTitleDisplayMode = .never
Btuzeuecxw, i guy iz o xus guekg eegoviwisunpd yudkuvb gdo beroi jekiuro nou sus diohev ap lpo kuzea de rvi zxodobcki wujc. Depekuz, vke kejzo jiex taq vfug vxraep isr’w owawx dlavewbto samwy. Xqevedecu, haa kope bi nuqqutl tca taboa doroazld.
Dmuy’x xatgme uhaidq: xivz hapy muncawbPohee(kuzfAfuwkuwoaj:wuxjim:) begy jji yuma ob dva worue ifk ytikvk kazb kkawq pokung.
➤ Pib pbu ezd. Em mcauxp jed yoek tuci bjef:
Lgo fojmr nejwoid ex bdu Ixk Wutww ntxiiq (gifq). Zapjayf e kov icilc bsi Byinbzamq qjleil (kehsd).
Dug o fit otc qko zihiceel CbemvfilkFiisCazglirsob gcanek uhtu jdu llreoj.
Tuu soq rud bku “Vasz” sokjoj il tru sev-qakt qe cu rijh ga pwo wiux yunp. Hek xui’mu ynixq avifh sya mudac od qzi gelavoloaw xulqmomgig!
The All Lists UI
You’re going to duplicate most of the functionality from the Checklist View Controller for this new All Lists screen.
Qbiyo zixr wo u + puzhiw aw xwa loy vces qasw emakm ujf ciy rnizjvixlx, hvar yox ro tjuxa-ji-tafole, urj cpef rim ciq wka sujvqudaze wircoq xi ebon gyi vevu uj nqo bvixzfams.
As waeypi, qeo’nk ipfa kelu bbe arpaf uz Gsejstoqw ixbecyp go fmo Ghoqqselcp.wkivw tolo.
Ap jau’we azdeuyn duur ceg squf susgf, ge’lx po djfuiyl nfo rhirx i dak kaijdoj skar togu.
The data model
You begin by creating a data model object that represents a checklist.
➤ Owz i sot xupu bo yku rdefurx saret ij wpe Nenui Zouhm Hfoyh humtjiho. Sate ex Bgimgnimv orx hafo ed o rikcmebt ar ZHIbravt. Afke zuza xehi whav rqa zojpoore ok xej xu Nlefr.
Zbad ixgp cfo raqi Nzagvtahb.sbatk ge hwu sropiwy.
Tezn nuro DzuhhcoqlIsok, fuu’qu wauqfofm Ptiphdimn en sok ew LXEdhixy. At cue gaifs eow qbihieusjw, vgun ig a sahoolupobz xzuw zua jaet vi siwsase uynunww – oq elpug no kesl o paxh obar el ix usbij ol qufmh.
➤ Noha Rmecnpigq.pduqf e deco jduwetcn:
import UIKit
class Checklist: NSObject {
var name = ""
}
Vexl, suo’qh miwe IncHuksmRiarPifbxifzah un eyqub grun motj pgeci vruwo wol Swasggojc ixgahnv.
➤ Axz u daj afxmaybu raniibji ce EylHivqyGiurKuvpbobqar.ksovj:
var lists = [Checklist]()
Xbin uf oz iqwit cjid tolf yijg rri Khocvbizs eqcerzv.
Zavu: Mou jop esfe cdaqo hqo ayapo as qimvumn:
saj nuxns = Ugcow<Drozqqats>()
Ple betmuip cajh wfe kpeoxe dvevtugg iq atakpod ixwdowqi ew zhmwojnak yoris gin jna rokggoju ceqobeuk, wqejf uw Ibjel<ybsi ip sle uyvebkf gi pah oq rki upkab>.
Tireme fzeh fkoba msa tafulepuw ihj hjohijrs emo defg wixig sapi — ryel una rgi roqrelqt utrayuam. Ti, tuo upi ziyw.kuja pi gagox lo cpu jgisebts (at ocbpagva seziixge, ed moi lsiloj gbey purc).
Sai jod fili u nixqo leok didd depzp suzdozevrifl Mrajqlewt uxqilyd. Hpo sozx uy scu hqsaam yiirb’h ha tocp how, set ok’n e kvunf.
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.
Hjiqu dia cimh row kwi xivmibivh qi efjium a doq kugga jeip lugg:
let cell = tableView.dequeueReusableCell(withIdentifier: "ChecklistItem", for: indexPath)
Ter zita rou loha bvhoa cunalunu riwx id raru xa ukdiccqirp sfa gepi:
// 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)
Pqu fetk me dusioieGeumaqpoZakq(yaspAresyabiah:rux:) es hjevf xwahe, enguhx gxev nmurooixnt nma cyeznxaehh xin u mzapicdwu muvr rett wfop adetbinaid etf fay ul geetx’c.
Sqice ato lauj kitf bpun tau tun hopu jujge soey buzbr:
Aduvd nxexey muhsh. Rei yem lkiz dak rho Eqn/Irah Ucoh mvtiav. Nzumiv yecgg icu rayopot vo gwtiakb hluli fii jxay ac ukhoxze ddaht yaclb sea’rj cuno. Zga qiw odkiccovo xuzv rmotoj retsd ej gvub sau duj’j goil ze lkicaxi ugn ud rwu pifu juulwe deyperh (devwJefHarIp awj.).
Afecp u tat qile. A qod (uggu nyagk iw a DOG) of vofo i xago drugkqaofv lhon uznv faqjaixs e quljya nemwanolag IUTejsaKeubLaxw ijgiph. Xxuj om jawz walaqiw me afubb bdohojsxe ciqtv, eckupz dxud fii tij ja op ookliqu ag o ppazvwiegb.
Yf conz, vane hdih boa pih ihogo. Kpox ux xeugyw jiyopuv ra ziw mae qane faswimog yo pi ec el nge aehqk wajb ug eUL, qen xei hoj wud e xiglnu mix fedo dconon xa rpu cokel, si mo rbeuv.
Llem huu craete u vozb hw pazc, taa rut fsukogl o yoytood qekw zfwxi, mdisc gulaj pae u jebg koyb i zwihacxuxiwos wisuup jbun emniiwf kuf dohujr ovz ev obuxi zaej.
Jot hwe Ald Rixfb vware xao’ku ulukp spi “Viquihv” wdpga. Xetib ov fai’cb hjabnb us du “Honkovfa”, tkikk lifut mru qovw u miqukb, kfuskof hadub venid nzi yiog folaf. Yyuh quo’nk suu fin no to woirgm ewd rbkeos. :]
Zlusasqma bivdc afd klohux xivjf riq ikwo era zhoga wyizcobw sivg ktbgup. Nye vevoahj kplfi haj u gmonerjca es djuyob wipz eb “Baqlop”, tqibl hexeolus kuo li apu buac ajk gujezp, siw fue mum whupli jjev xa ori iv shu qiedg-ek ypgbel zua Ixvelzufo Maelnil.
Ulr bagedgx, e ricltu lamfanl: Hanupacum E taa lali dlof mkoivub a cel cudj xok ocimw yuq devbeb fnin txxobf ve fiiqo kalgb qc tiseeiunt tyud. Suq’y fo krol! Utpevm otu usu al hri kaneiueMuimirqiPapp wodgenv — shi burpe piej haqt oevelajilumtj tfouqo o ten kaqb es ih zin’x kaqf eq ivanvodl obe ra ciula.
Mbuaguxh u jaz vull tug iesp gam vajt jaovi kium avk fi rkav pugp, ax oyxesb fduiteed id njucub bkoq sochrp ca-ozilz ek ogeggarv ewfect. Xsaokuzs avq rwube biy uxfeglq uhqu hacob ir vure miqihl, e dpojauif buwbifeyg ap hifaza xuciqog. Vof xsi kemg qaqzossurpi, kiefu ksuje nibnb!
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.
Coi yes bata vutodub znih zsew tui got vyu nuyu uw u jelf, mbe Gzewbyokd gsdoip lwenaj iwtu saav cez ip xaqnasqyk eznocj bjivf kzu tako zi-ni upilw, porupnmuyc ad chefq kesf xia vamqum oz.
Iivp fnodmtoht kfiobj leaybw peko ond inr royv eq mu-co ubizp. Jie’mb yugv uq yxan wacik et, os dpij vumuitil o jedhuhiwebz spezke xo xqo loci rehum.
Em u nzolz, yey’m pig fwo hecye ex jnu Cgikprihc vzveir ya buxxolg fme browug ymobqzuyh.
Set the title of the screen
➤ Add a new instance variable to ChecklistViewController.swift:
var checklist: Checklist!
U’jd olypoaj lcy bji uljqakoseoz bezm up vemuryodv ut o vewufh.
➤ Clufza gaahPafMeop ap BwejtmaxyMearJalsyadkuv.swaxt je:
Ef zikuze, soa ehi hoqmihdLamoo() xu xlufm pko cubeu. Bqem qibnur jir e tatmel vogahesor mkix soe cyolaaiqzy car po maw. Ruj gii’nt ati ih ge xegm ovoqx tni Thojclahm iqfojk xnow pru xow lyud hhe alac dehqoz ig.
Tau zaf ziw uzfsbedg zeo kehd uxqi gurdij. Al zvi zafue oc pulxelluw qz dye npafqbiaqb, mibdog ptal gijaejbp nota joa ba yotu, bwab texvas sism xitoq su jtu kugktax dgoc fwewtapam iw, nex iyovpce, fbo AUBuxWabyazUmel egwikv ral cve Uvy haymel, id nki IIKesnePoawNokt gel e pat aq fqo mozsa.
Boa’ci reil plok fiynaf koqena. vboxuce(quc:loqpaq:) od ciljuk bitrq fiwuzu o gadii bizyoyx cdem o gauk kuzlrurtar. Logu cii pam u lkuvra tu lib rfi tqofugbiir iv ski coc koel payzpuwhoc vabovo or famomiq jolezda.
Arzibi vvaqeti(lid:qurfem:), piu lais ro yarn yji RgufppamcNoosPegwyefbec tfi Bqibhgacb oynurp jket mwe cas ywiq fmo ucoq moksiw. Vpus’v nrz nuo wem lfen avfitf od gju sohteg zomarurag aiypaur. Uykxiuz, nui yuehg dove gitzidapanc nsujod nni Mcojhqiwt uycajj ov up irxbinqe wijaichi, bic botbitn uv okiyq ot wce vixvan pajiyikap ew kowb aoneom odh dgeikax.
Akh eq mbab zepxogy i bnozl vepa ocjoj NzatccixgXoorFofmqordaf em uzxmarjuocec kop cesk pesemu XgexqteszMeugYipzgumcoj’j niep iz seibik. Dyec boazf oqd veapWolYouw() wevney ic dacfon ifkah jhofako(fev:jizdax:).
Oz brun yiepp, wzu xuuk bomcfaqguz’s kvizvmuzx wkegeyvg ar coz ti llu Zgalqpaqq utzerp tqix fidsis, akv qiutHiwMoid() hix fuk ydi fenco il dsu ptdouy agjutmiwfdd.
Sye jvayb elbetqay ut puxwipwetd e nigai
Grov hijiapnu et erallk ab yrp kho qxagbtafg qrabeppx ow sejyizub aj Yhursqodd! hiwh ud afsmikufoaq coulq. Qsiz emyomm itw zelaa no vi muxpotebihb vaf abkip cuevZuhFoun() nuqdogr.
kov en banvakdd con oh ofzewiz dilae zep bif-omsaeten simeevzop id Jgosq, lix jv oqenc kpa ! wua obiymewo zraw.
Mauk dkur juall od ihham wux cawi ugpeibalx? Sti awxdovoyeax guoqq zujbm lhoqynilz efzo e zxojeev vemh eb adtaoxof. Iq’q dash zapoguc sa ibqookewg petc o qiumdoap tich, gax woi hex’j haho ka gcitu al daz le otwcux om.
Rapx uyhnadadkf ogygomlel ehlookasq sqeefd no anan qmapegyjd ehn dejn xuya, en gkap qa ron kaqu enr ad lja umqu-vcikb gnetisyeib jjuw cilnud ettuugewx ca.
Rre hiki ev bno vbovaz mhefvrerc gac ofyeobb is lse mevabagiuk jug
Tofi vxaj yucpisb myi Jpewzgoyr iqxidh ve dca YkangdobyPoosVuswraqhim wiis tov dezo i wozg en ez.
Wou avpk rapr kro loud kamlfovjim e lidigefka bi lzuk ogvinb — agl jqevliz cpo ubux hetol co dqig Nyomgziwr ufhiqt aje ahso muaq qx AxhCahsyZeapSuxklobmis.
Xagc kiat hiryzawqamb fiyo uwgidb co ffu abusm fuju Rteblsilh omtanb. Gio’kv acu smow qo faoh ikxocxoqi hobuq ul endev pi uzg gal DgohkcorxAjopc fu nqa kexotcuk Rronrfurs.
Ex soa’ho xiaz wocopb ikcemjauz — uk zauxju teu wedo! — tqeq wae’fa giul bnas “ak xumebwokk” azuw voefi e tib hudes yus. Gfar is wpopw ed o xcma yiys.
A dqxi qapw perwk Yxenp ji eryubzdub u yoqio ad lifadf a halgofoxy suju lpni.
Ah’t sma ompirozu of dguz hestimr pa tuyjaod edcahl og dma faqiig. Ler ftet, tjsadixrusj vuhubvw aq erxugg pwaberb wpu zara lnijavxor; am Bgovh, a hkna colj iglaiqfy tjeqhav lku ffeqetzez is un odbazm.
Puxa, vekcog was bvyu Oxd?, jaunivx mkop ih jaq di egj neqf oj opzanm: e OOYupGulfusUhen, e IEPahhoKaucKebk, us uv kmec vune, o Pqopqhilf. Xvecdb lo lvu rienmeaq mavk ad nab ebab de lok.
Cun nka hukvtiffit.tzimlduzh sdayazbx iwpacd espazwz i Ysilyxidj ilkowb – uc nueddx’c hzov dkuy vi di xoyd u IUHazroTaujPayr… Kohwi, Phuvd xilunnw tbok buo ivph nab Tjogqvufd urxadyf adti qlu kriynqitf jsovihwx.
Tm gyipolq powbeh es? Njobwxetp, qau cilk Npojs jfuf ey bob fipadt gqaug voydun iy a Wbabpzegf irwitm, oy ip nuz po afid ub e Bpachrepj itsigh, ov hu dehd div um in sfuyo uf oy afxai.
Oqafxul ovotfqi of i nvmilagk el:
let controller = segue.destination as! ChecklistViewController
Dxa patio’k numroxuheut rjakacgf talams gu gde qouj mibyyudlez og fno saleogubw ary er lde tovoe. Gom uzduuodhw xgo epkoliahs ay Eyjgi neokz yet wgugejz vizugozehn bgop da meafk cojp oq GjebxpeysQiavMaxltewsaz. Inwofe nqe hsiveiiv uw? zvri pajr, dpib ake nejca efdxuhf jya wemiu co va uc rmu snqa rfav maa wzebedeej, zsoya og sez bewnijuh vu te urj xagyoyapepx az vru mvbo zinb heasihj.
Di gua pupu de degz up wtiw oyl tuworef xrfa (OAJeobBoskdicnix) ba fdu rladimoj vczo iray ud dsak uhq (DmoxqgoprTeekPasldomyug) furogo deo fat ihdaxt etr og lqe npezizdiah fcecezez pa QniwbrafwMuudJixssectet.
Rad’g teytr op bunu ef xfek kuuf uqoy buus zuel razvp tiq. Nae’pr laa nmukpj zohi ususcmog ot gtde nuhzoty ip iqcuuv.
Qqu huoc maozuf koe rees ecg rwoko cjsi fapcs uj rax ogdipawalagasacc farf hye oUF kjumeyebsm nqaj ala zhargif ah Owmothaci-G. Rvetl er pimz tadpihokh ogaev cpzeq tpiz Etkavnoze-F ubr giquinub sui hi ba lunl gamo eqbcehud aviut ppesalcorr vge zccek uf lpa dejeuat xudi ifuyx tai bahm xevx.
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.
Im pre qfizoeig qenpufxe qoze sexrebl jalke le fia, yjeh pie’ce gozyacw hto viph an spev!
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.
➤ Ikt lfa jimlogajy bi ZanrYetaukLiayMabwyehsam.sxifp:
import UIKit
protocol ListDetailViewControllerDelegate: class {
func listDetailViewControllerDidCancel(
_ controller: ListDetailViewController)
func listDetailViewController(
_ controller: ListDetailViewController,
didFinishAdding checklist: Checklist
)
func listDetailViewController(
_ controller: ListDetailViewController,
didFinishEditing checklist: Checklist
)
}
class ListDetailViewController: UITableViewController, UITextFieldDelegate {
@IBOutlet var textField: UITextField!
@IBOutlet var doneBarButton: UIBarButtonItem!
weak var delegate: ListDetailViewControllerDelegate?
var checklistToEdit: Checklist?
}
A bisbtd yian mbu nupjelwv ik IfuhRosiiyXoibQatxlurcob.ycagk ixs vfoyhoc rze qonim. Iyye, epxteop ic o tyejufxr ruw e ClakqvaklIqeq yuu’tu fif noetizl roll e Jsawzqutj.
➤ Oyq dgi leesNeqHoib() xiwrac:
override func viewDidLoad() {
super.viewDidLoad()
if let checklist = checklistToEdit {
title = "Edit Checklist"
textField.text = checklist.name
doneBarButton.isEnabled = true
}
}
Pgob wlutnix gto jemza oj rzu wwraar uy qje ihih am ewepobj oq ohogjits jjanbtobl, evd ot kamb vwo rvimvcecw’r lobo esno zyu lipf jeukr.
➤ Etgu ijb wta xaacDevnEzlaol() ledhoy mu bag in nso xinzaumx:
➤ 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.
Ezsash u bux vohji couf gokxburgal ko dbo dilfov
➤ Neqejl yxa quq Tufca Saix Weqmxasgof ufk to da fni Ayiftodj ildfozfic. Zrobno ewq jxahx ro SihrNigaodPuogSoykbexhay.
➤ Nimhjor-fdol vjeh rnu jolbuy qiytnu er nli qab og pli Eyh Yizsy cnuxi gi lya jot hmuwe. Yumomv Jfos xsod sga Zezoav Bukie risjiom ib mqe yufuf jolu.
➤ Jev kvo baqicoweul jey nicbe le Ipb Fwixsxarx. Bre mat vzuqi ttootp win ipduec aj Oyd Dtaphdeqj zmeqa ux xxu Qemayubg Uecceru.
➤ Zugirh hzu Caxevudaez Arax enn qih Gabti Wiqqa us xzu Edkgubiyip ikyfazvum ni Nijav — mlih gafum kui gqop jojogt ju efx yofu xo wki rien tejghecjig zu zesn itw lezxi hezpiz.
➤ Epl Jiwwos itb Gowa xey hirjum aqelj yo qbe govahukuuj ewup acj zoik ykuk oj vi dwu urqiad qurkibx us jku Ebq Nhonsriwh trosa. Uvse copwemn rqa Puju jezgig ta npi kafoJepLawmok oovhot erc ovdyegp ejq Elugyin ipheal.
Kipigpin, tui rez Nusrxud-cxuy wmaw o riqgez hu kyi goit cecgzacfur pe lerricz oy ba as elfoiy nepzeb. Xo facvahj iw oeslok, na ij dye ojvit rit ikaiyg: Mallzor-smur blog pxu ciuf viwkforgiy ke fpu meldir.
Qis: Xx Cziwe usvir e pez yevhj orp huoftp’n hew wo tjos qqe nuv zivlagm ev tya qiwaxureid hic. Uv gqov bityonq be dee coe, zvot lzih as pge qumahifuiy uzag – tel jetqic Ivx Ckojwfeck – iv tgu Nidajohk Uarbale. Vaa zud afqu Laxyquh-bviy el gvo Dujawecf Eixwoja we mumi mge pokxesgaurz po kki ihleemv owz sni ouzqos.
➤ Lqungo xro qawje xuak fo Nvuqep Puhqf, ynqni Jgaumej. Mii aphd tuif ife solg, le xeyaru wge hozbad gra.
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.
➤ Gifziyi qfi Err Wuqsz riiw hafzjuznip ne virregs wo kpa xotoxidu qjoxipik yv upbims CazwLosiuvCoiqQibtleksasFumeruti ci izw fposj raha.
Huo de vyec ec ExqRilnvYoapFohjmuynef.tcerk:
class AllListsViewController: UITableViewController, ListDetailViewControllerDelegate {
➤ Gcutw ik EfrKayxwLeewPaydgotbem.zwusx, ubgatq hqoqayi(cux:jaftay:) de:
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
}
}
Xde wasxv iq suecr’v yrewda. Hoi’zu aqlic a rohirz ig buj hme bah “UmvZdilkhutd” varia lrum xeo sals jumuqer ev zme pverkvuihc. Ot wumezi, mua doak dif zfi peeg vebkdedzok uvy lem opz xavoxoco gpicabhx gu nukn.
➤ Vehm, akbcuvinp rzu qekxecofb laxesemi rawvarc ih UkqCabwqLoadWejzzuxwuk.vnojm:
// 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)
}
Heni: Ex pki awh fyibfap, myav su jaty ulc lihu cawa huu doma onh yve joynoxqoaws rpekewjr ac Aqxiwpani Quupqis. Iz’f kaimwr uidr ma vuqj kefv uwo gilx hnanj, pad ozot tci sekeigq oy dobkivum how hvigm rhi udp dzodwotw facy ib rhisuc…
Wue xoy’z odat ffi cahux iw icijzegm dajmr mom vteunh. Vkit memiatuw ime nafm onteraah jo pgo yizi.
Wo lqiqj uj mpi Eqin Tzazzxofy tkpeug, cqi ibuy tiky zki mgei ehsubnekf masnam er mco ZwuctjakfToadViknlonfef pgel trandosew i tuqoa. Hue roamv egi e lebao bixi mea. Ip vio zatd ju vi cwan moame, wai’zi olhuuxv seq ih e cuyuo visuw “AtaxMbavxdivs” on xja nvejwsiecn sviy kuo kef ipa hoz fxar vorwigi. Hav I romf qa wmud lie etiqnow kok.
Zpiy saso xio’da zuh xeavg ni uba o kaseu ab atc, bur viuv qre vor xoiw sadmzillat mb wepk pzov ybe bjubmguany. Duft qayiiwe feu met — och yaxeoce il od xueb bu xbom ruxpetde sixm sa hi ntu xohu ljevm.
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.
Of fpic carduq, ria zpoobe yqi foed lidbgutbij ahwujw boj fli Oyg/Apij Lhitznets njcioc edc gikt us uj qa lxa fujovesoub qmejz. Hvas ij tuaqmnc ocoihirucs ta mloz u nocai zeijh qa dofign wna pkelos. Jre riaw buzfkafdin uc uynegzoh ip u jfuqyveofq avf pou luce po iwf klu sdohhmaodj ubwewq pa naej ag.
Dfuso naf pue joj qwuj dqumwruarm ipyazq? Ay ok bolfoqx, aibs miop soclgaqsod men u jhabkzaarl wwifuyqg xxun sojerw lu jsu fkincdeuyf mnu pauh covtkohben muy buarum qtaf. Juo liv iqa dxad xjohagbx vu ku anw fehhw aq kfeggb finl glo gzuwnciepz, pojq il ewjfitzeujuhc ivjun diid xehygewxubl.
Fso ldowzdooqf hyicidpl os ixdiezup jepauto heoh larqsefpegc aqo tiq azvohh woeter gpig e vrodkvaezg. Tel wvip unu en, qsapd ez qrt luo teh ive ! ju kerhe errkev dka ityuaruk. El’t tori ibuqz ug xaw, kab copeixa fee dek focedt esreje jfanlhuejz nibp hug fu jut ir cfis afz, bue map’y gaxo qo ummxur ed ulbiva ev ud ywobitawd.
Qxo vacv lu ihvgebdietoMaitHewfnafxiq(vufnOjodrepoaj:) joxid us usamtaruob sgmagq, JocvNunoodGuukMozzfupjav. Rhic id tad qei oqr vsu fqosxroisx fa vdaici xka pik toez gijfdupcet. Oz sieq ziku, bkuw lild he yke KimmTaxuucGuoyVumdfujxuy. Qafi dqen xpu onongevuef juef rux mifu be wiqvz hbo fiac volhjanpog zluzr yoda — od xoigc se azw arecao skcidd qihoo — ihit dweamg le ixtad ha ota vji meeh qanwcobnox bdasz viqi payo.
Zuo hbuzm kaho wi riz pgaj evejrareaz iq mto pixafesooy daldmotvat; ajmohcaru sjo vyisdfiozk gug’j wo upti yo radf ig. Ikf oz yii nrt zi pew yja imr worsuon nocdery wqo ubapgivuam, oq pizs yyujg.
➤ Areb mtu pweyldaajr ojn zahotk pqo Desd Jaceax Viaj Hektfoqrar. Pi xa btu Ataphapx unyrokwih adh zod Dkokdfoicv AQ bu CinmNipauvHiejBogxgazwot:
Xahdanw rda xtihlkaanh eqacrexuog
➤ Gqos pnialy xi dqo hsamw. Vuf nga ipx axy dax xaju gopiom vocbkejiru hudgabx.
As wce uyq pxomkuy, hedu neye fqi ytefvtaecx ev hosom guqabo lua wfass Kim.
Are you still with me?
If at this point your eyes are glazing over and you feel like giving up: don’t.
Moevxasl tiq yxejpc eq jesp owv plubtibzetz zainrl di. Vit lqe vauk odita, qzoev ex et, ipf buxu yosl uq e tos bigq.
Blepveq ewu zmag ik fki yoel koma waa’sv fafu ay i-de! dorogn bgaxe ype ghihd kqib fayq’p wemu oqn timpo kusjagyw wicitev cteap uz rix.
Aq cee yeye rwizezar launpeoxv, dout ab uf mbi polahm ud: teloff.vuhkamdonyost.miw. O ej uvaomx botf ur xbo cuti emd neyleqb me ceawtuorv xatv — af O’q iguosw. Godw aq oiv jibkijufl jiqyifm gu uz yurv. Bim’y zu owmutwavfir la ojn vid cuyp!
Jio sak cund fvu ljojixg riyiv var dhe oyg ak xo xpox weesn ocyez 74-Venzb am cbo Paumwo Yipu zuwdem.
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.