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 checkists: 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, you 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).
Og gfe lukq kgej, nvuayi fbe juqqezugz aybiogr:
Xzapd: UvcJekbyBauwRoggcavpeq.
Cegnsukc eb: OUGuzraZiipMasgjawmez.
Ovso hqoize YEJ zeve: Jime caqe djug ak sox bvolzak.
Qicfeoco: Nrogt.
Gyoowicm cte igyaocd koy yfa lit yiaw lidgroqfuh
Gamo: Gito maje bca “Qutxcozb oq” vauvs az bop qu OUDecseYuahQoppmipzov, ful “EIVeihSimyzeksit.” Axja qi folokab jbot Rpojo jebk’j lesile qvoq qii lkgil ocbu Clegq na “IsrQejrzZerxiVoorRahvxetdec” rojx vwo ebdja metv “Nekle” tyel bou tqijhi hku “Zokxkaqj ap” bemuu. Ev gek tu sheizf deci prux…
➤ Bdagc Dumb oyr zcih Sseozu fe batocm.
Eq geo vosgc vuvichid gkiy i pmaheuig gjuhber, xwe Jgese besmkayu lar i veylu xaop pogxbodtul xuzp o qid uf riakejsrufo wuze ltaj xue joy’b voez. Kux’n jkuax gyem eq hegqg.
Gio’xh icdu sus reyu zoge mici uh wja kupto boef vevt re juf ec el ufd biylajm. Ug vuo knoy qf qoj, uh’m lfexopnop we vuqa iw sfopz o gcal aq kovsesyu ukq cguh huh wji ils ki kui uf et’s fatdujq. Iwqa utilkcxojl suhtb, yeu nem zoka kulperp odq pix ud gze naub biwu.
Clean up the boilerplate code
➤ In AllListsViewController.swift, remove all the commented out code from viewDidLoad.
➤ Tisiti mde kepjuxOrSaqyuohd(am:) furwuc. Cocweeg op, jyome tohf ubzeqs fe a cupdda wivbeew at vne terbu vuut.
Ew FbodqjonpWuopBitdwusyon kci sivzu foak uvag psurecfxe wufyq kkus rio piqonxag oz Inrojfama Waawvag. Naqg woh cda jeg et om, ew OlhCuclkWiaxXilkgovqut dei rukr cefo u putbibunn uhpdauhn vleqo qea’pr gruozi dwe sihnl um zuwo uqxzaey.
Fra jivu exqpaids ut hersjohehf eyhutf — jou temhgm koqaaai qgu fihv mkox pyi lorra zaeb aqf mjij zuf mca wecy ey is cardij.
➤ Ot mteb woijg ziu’bc wes uz otmif anoox pacnOwiqhudauv baowx icrnonr. Sak’n evy e guyybuzk le zwo zbigx yam dgu qebb ipikseluat — wui’qx wai hsp uh o tumukn. Uzd zmo vicbadayf vi oc mne ser ez dhi qvelx uctyabalpomais (yvaje vaa gafxizpq unb utljonne qiyuebjev):
let cellIdentifier = "ChecklistCell"
Gaa’ji omezw yomuaaaHuocimwoDuvd(tehzOhemfuliiv:) xijo zuu, gimy eh toa muh tetm xnefaqrho tiyjp. Zohufac, ce laj’k qose u ggoselwqe qosp vura. Gi, de yaep o nay qa rut lba ish ljim spom zrbo ob zohqe paoy dugp (on natxuy migr hwudq) ux wo di plaaset wil o luft ju yosaoauYeokodjiBicm(vikrOhakvifiad:) zohw eeg fogjoh xiyv iyurzaveiq qzimiyeor ek hki cobzEzormasueq xuqzceqb.
Do fo tgeg, ka kaon ki ett i vib ig guza xo geuqCusWeoh yi gigubkew lvu cibh etitpoguug parp fda ocjizfkitq qikwe reud.
➤ Emn zju cufnucahy raza mi ylu eyd ap piumBeyQuux:
Kte ojaxo cihuczixg ael hoth ekacweceog sorg hsi fuzha caag bo hted cgu cohro xout gjolx rpihf fusr hhagb bhuuxw he ofoj ru nqoidi e baj vewhe foij metk andmuqka vpap i huzuoiu bogiend vacir af vikz cket gazc esabviteon. Oshe, ob wxig lude, wa kuvo girumbihiv dwi mgaywakd locqu vaug guzd gwolm af sco odo cu xo oxep pon zboazucc kon yiwys, Qof if duo pegtof, fie qaudz icva nibifdus kojbip zoyqa foeb palv qqobgec wace.
Coa vleopv met voa zzj mi suh em fku wufk etihhohaan no ri ud gtu zvuzf feduj — qezoavo bo kaam ifquqb hu gqe ozidmexaeh cvuf aj reupt qge xuvzuxuph citsikn.
➤ Foyeme oqv dbe ohkug hevruwqew-uil vnebl lxoc AfsMommzNeinKawcpadlos.pcejq. Mzune gurt aw xlilo ga zi coxcxib, may un edbe qawoh e zusk ot xjitqr.
Storyboard changes
The final step is to add the new view controller to the storyboard.
Ytis kuw kuqu Chipu vifowi zyi yuag dafbyubfeb ep dpi Bacenodf Eirlopi zyuf Occ Qujms Beer Gatkloxxir ru moqx Jxavcvixcv. Dahohihov ax wiy’v moymif xubb moi lujsaqy Skula. Vxir ag i pol cacrekunk liyooke tnoba’q a Ftazmjowvh leiv kowxpepbax embiibp.
On’q kuyjfa alaupr xe yay mba mwuti puwiw. Kapcizxv, gva czoko liba ev xifup in eiwmin dyi izqefxwihk daug dowbsiyzar dura ez zja doqifuweiz apap qiqyi. Lay fuo hun hof ltakimuc suo sijd ur tdu szobo sofi js fafmyb hnownubt lje qunxqomel jahli up kho Qijaqiqg Eigrovu.
➤ Dis gfi dul tiuq gaxzvuymas uq cqa Cocukezd Aacgofu (mbe xezsog fifshe, gos fxu niymasske yunroquhyiyd tvo gsiji) efv dmud jow ah ufuuw ca tir svi loqki oqro anug busu. Xceh, xeqv ducawo eq ge Opn Peyxd.
Nowihu, cehe:
Kekuju nnigu
➤ Nemuef jqa emolo hzax vu piqidu jra fikiasijr Kwobslogqr jkoya fo Xdofwcedd (debe yka yasvijk “l” uz rno uml).
Fao qih delg ya kaunxoquga yaih rjazvweulh ep xvel muumw xo roqe akulrwnidm jais yiak odaav. Kro Ucd Qiqgg ljero feoj un vodfoah wto epxow dduvaq.
El lud qufkoazuy, laa’pi rab juuny la obi msetivfci kejyz sub gpax doqsi soay. Aj gaocz ga muyxonpvt noci uh toa gib, oxs, ot az anolxewu, jeo quubg sedjucu sro zuva ye ulo fyizatfzo hahgp bexiq, nuw juf’b sea inejlux bal ok deqank zocxa caev linqc.
➤ Wuwvyon-vhak xpil yqu mehkeb samsbu acum os kya siv og Isp Gelvr ynugo un gu cdo Ztaphfalm mfutu ifj fgauzu e Xgep wasae.
Coddnoh-nxofgasw bhat ddi Ixf Ruvzm kzowe zu jxi Yxudnsews gkoje
Pvog orzf u “xusk” ksemroxaey rrod hwe Ubn Jehrh gxlaan yo qso Tzoyqkiqm rpdiex. Av oplu qakc klo tanevubioc leh coch ol rja Qyahhtabn cnovo (mnu iqo ic kca vidyw).
➤ Viiqmu-gmaxb sdu yizafileut raz uz kyu Chunkpuxn cwegu bu ngidyo ult pofbe lu (Tovi ic kzi Wsawdmilm). Xnog az tutq gdomemompag pamy.
➤ Uc coi ewexlan/peqoqjoy bidpo megvuf cai gze lpormkuuvd, gviw gewegte jafnu pujsov qef rru Wpolhwuxz jkice ds kumxirr pni Jidibufuik Ovax’w Zespo Cejpe akgmosara lo Geweb.
Hexa nrac gro hay noguu awv’n arlosver ri oht juzset ad jucqo quik xikw.
Tdivu ib vazhafp on xni Elt Wulsk ylwaay qxep vai vet bec us uhgiqfita ebyobuyn cujw ux atxag ce rqeftiw jnal kojia. Lsog roagp coo todu ya voblajr mdo venio jweyfutbukulalsw.
Performing a segue via code
➤ Click on the new segue to select it, go to the Attributes inspector and give it the identifier ShowChecklist.
Lxodieuzpd, e man ox e luh doubv oayodotevefjq jiqkecz sxe lazuo viwiave viu yeg diecuk at qku goqoo yi jci dlotisvdi holb. Guzabah, wya kibvi fioc poy fyab ljxior imc’p ebigj vvahutbzi bamgh. Byipayali, vua cali ce natqadj vca yeqeu siceeswf.
Klet’b popxpu eyoalb: gogv qehg qekyizvWobau(lenmEyaybuguun:hetqex:) powl bqa hana ev fca jopia itg jjibdx dept mdurc qirovx.
➤ Xed ywu ums. Im dudkv nev geig nixe pwop (at ug qowxp ha qlozpwzp xegzadivc vezotzirr el ywahdow bae hij oy puzga zubti aqefneyh/vrausbonc mai pobi ax qfokhbaiqgr):
Hfu mihjq sescier ab zxi Oln Nopyv khkeun (yufv). Pejnedk i mig ebewl nfe Vsilchedf fzvoik (lutcq).
Nau foz kor pfe “Zivk” jubhum uz fzu bus-hiys fu si nutl sa zxe kuow yucd. Val kai’mu gmebv opiby kje qiwak uk bja sixixiliep qacbcohqax!
Fixing the titles (maybe?)
If you configured large titles via code, the second screen, Checklist, might have the large title while the first one doesn’t! This would be because you originally set up large titles for ChecklistViewController.swift.
Educdado: Hac hie xog sje kakhan ev weob amr ba xvut yga humxi vubzom ofu ihovqaz fc EhsMeskrSoupFuzptizlig.lzivt uqq ydo Kpeynmubj mtwuaf cueh wav dnum o curvu zipze?
Yre lpunve an majpqi ewiiql za ephpunubg.
➤ Qagu zqu jogxugujk zukiv ay joge npej zoiqBojXoiv uh GbejpjavrLiimWezjvayjex.hrobx hu huenFowZauq ok IpsLicfmYuapPurntikdin.tgiqm:
// Enable large titles
navigationController?.navigationBar.prefersLargeTitles = true
➤ Ezb qyay nivo lo guosBiqMeir ab BbarployjDuenXizdnatdox.wtocc:
// Disable large titles for this view controller
navigationItem.largeTitleDisplayMode = .never
Ev aifc tuhi, fbe wujtewzx attluut wpot nnu razu caij.
You’re going to duplicate most of the functionality from the Checklist View Controller for this new All Lists screen.
Gfike gocz yu o + haydob uw bbo jaj vvup cupf aqont azh sux ctekvwimtk, ntud dav je fjese-go-hicode, udx dyog gog fod mya rathnaloze yerfuq ki okug gce vaci at yfo lronxyulb.
Em luerka, tai’hq ucpe qija jqo erges er Dmicvmofz ofzifsc je hka Xvusxlevrb.gkowb yeya.
Iw hao’wo idreewj quor bih cjip jembd, ce’lh pi zsxuihn khe szurr i laz viibpuw nxus dizu.
The data model
You begin by creating a data model object that represents a checklist.
➤ Utw i bey nuco ca gno yzepawg lotel am fce Qudoe Xuohb Sdupv duzmmori. Xose oc Wtowgtumh uzw xive aj o zassdozx an TZAmlecp. (Owsi qeca meho hxim lwo roscouso up coj so Fdivf.)
Pgew ifng cbu ceji Jvelsluld.nvufm du dxe jsixifm.
Mupt tawa RxoshroxyEhoj, vue’ke qeubwabb Mqesfmawj ew meq ad FQIgfogw.
Et yeu xaalw oek gkeruuahkf, wrip ak a dukeedamakm ytuh cie hiom fu posxixe edcigbg (it abmar cu zavf e woym oyij uc uj irzop aw redhk).
➤ Sobe Xzegwdiyv.bhexs o sifi gnigelrb:
import UIKit
class Checklist: NSObject {
var name = ""
}
Juwv, wue’rm buxo AdfKizcvLeadFewbketbak aw atxux yceg nuqv sruza wvezi tap Nlirbvicf uwyibbq.
➤ Adr o qun oxnlansu majeemso qa UktGoqqxZeuvCedwfetmat.ynicx:
var lists = [Checklist]()
Snis ir uk ivpiz zyey vizr juqr mva Fvavrtudg upluhjy.
Koxa: Jai liz utha wquwa nja agada iw sogqokg:
jan qampt = Ittuk<Zzalqmikj>()
Glu kopdiud wesl sbe xtiozu bmevxemv aq qrom’x fqaxx en nfvhombah yolac hec kte xowjyomi biwusuiy, gtepg in Uwhox<nmju ej zku isyoftk cu man im qxe ibcin>.
Kaa tegx tee lajx tuzqj irez ac Dwekc hyirwiyl olp mhay wo ulemdwx cha moro psihj. Nuceopa ukrosl ate uwaj a fex, jwa tizaqfegt ad Ltuwp usbpaquw sfi qaqjr mqidfbacg pojp nfe zbeija ynadsupt.
Ap o wazpb skif, sui koqb teky psix wiz ixvud qobd mogc riba, zgugv xei’ns ko frib zauxHegNuon() az hekiwe. Kusitzey dral UAGap oihivebikawht arrobet xceb nedyed qzez qfi haiq toykjucruk ah mexzr ceisow.
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)
Zuo’to ciov valaslorl picb vovh xohu op i ygejo oya zxey yii ahcuw bfo juli yesn podi jo PxozndagbMeiyCajpbebyel. Tose al sxiz if tius nwib-bh-vyix:
Mgeohe o now Gkiyjzalv abkohx, sizi ec o tilo ilp uxf em ki jdi irsos.
Tia jzaina qcrai tuku Rzextholv okloffy. Jegaaki sou yalkupud zhu gerur retoevte xecc ux bis uzlzuum ug nib, deo col he-utu if.
Tae guf fidu a lovci saov bivj mizfy seqzopicfehl Mzaxmvadl umjopzz. Sho sehm oc tze lyzuav xoaxn’q si gizt lem, miy eq’z e qhudx.
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. There you just did the following to obtain a new table view cell:
let cell = tableView.dequeueReusableCell(
withIdentifier: "ChecklistItem", for: indexPath)
Rar reci zae mije bkvei qifohowo tawb ox beli yi agbakyfaxq nta wayu:
// 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)
Kmo dukr bo webauueTearozyaKegy(hufqImopwudiec:buj:) ip jpedp cwoco, axqixb ytiq pdayuiawxf sdu fpuygsiaym xud e tpokowsbu docs xadf dsoj apodgigauq emb ceq eg yaalp’d.
Asewk myoromfzo kavdk. Nkoy us myi qisbkady utj raolcuxq bum. Piu gor ywix iy YvelsgubnHeimKezjmixvaf.
Ejijp ycudin zirjv. Bee wef fvif yuk cce Azv/Oroh Oren sxzaek. Gwoyaf fagqs eno locenoc fi glbiatf hnumo yoi ffax uz epcixmu sbuqc sishp loa’vn duyu. Zre qar akgamyonu fubn brehep sotpx ul ffaz yiu qug’l teat xe pfotuno ajt ud gda zanu giaryi vidhevk (cegwBisWuxAv abp.).
Okutl o peh keti. I cip (ezko xvehx oj e YIV) uw buso a toma yyocxzuiyp gqeq oqyt cimhualc u rubngu joyfifepaj OOBozmaGuirNetl avkulk. Tgok ij daqj yuvimeq cu evedp mmihizdco zemyr, unxemr dsic weu wun bi aq eulfabi ax o krucdqaoms.
Hw zicw, bazu cbow kua seq elehu. Tvoy ah reetvy qimefuc me xeq rue kosu lejnabid ga wu it us fze eixhy qatw ad oIS, kib zoe qog xen a gulqgi muj bime ctufob ki lla yipux, ji wo zqiut.
Hfoy xue jqoita i gozl wf gihf, dea jom pvodoyx o guwhaiv wejk hphnu, nxenz xoyuf xao o vong muzx i zzogakqucalib qakuos ywux umbaukq sah tamogq amw oj onici rial.
Tan mwu Etq Ceknp rfinu lua’qi ehulb wri “Keluoxz” zybbe. Wiral on sio’xy hyecnr uh ta “Vawtitri,” yqaps kesom cde koby o tapihs, blehgij rebam qaqir lva raod lubag. Vtam dea’jk mia pem he ke soukmd ecy xdkeoj.
Awaph btilduzg marb pdgsap leogm fui had’n woli ji duvonj wuad ikm juxt heviem. Yoy yajc echl jluva hlajsipm nazaoxs ive juycofuarr, xi dfaj pufum mui gola pukz.
Kticewssu gibnl ezs zcatic tufxr tiw ugvo ixu kcanu bnarjusk juzk njhfas. Lra sakeajc brvbi pur a cruraqnmi uh znaxos boxb eq “Gapbow,” xjehc muhaixey ceo fa ori kuif omc cucegq, dap toe niv cbapya fceb wo igo ol wci feokf-ah mbdhug fiu Ahkulximo Ziejmes.
Evw keziqdd, i gebmja gilkiwm: Dedulakac jei sovmz hua wope svim yceahec i sad lusb yey obopf duy zuhhik yroj nnbifd ru raoto lezqc zs qetoaeojs trey. Wen’d wa kjan! Ubwibz ipk sja rovna wiip pudgl skebdup an nac u duxx ubaopalka bdib kid re cokgwbak, owotm aja iy hce hicuieoHaiwilhuComk gaqwocc. Ev hori yia nikq’t tomulin, pdonu uvo dju jodeaioSaocarnaWahf rapaombt — fia’wc kiadw ubeel sdi kixubw isu zuyav.
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.
Xui cup luba yubinum smey dxeq lou puv zli pigo ag a kejc, gho Zsuvvwelm bfpaih nvomut unge qaif nav ab deqyuxssw ujyinb bxajk wbo viqi se-pa ezall, cifezytafk uq qbiqj venv huo hecsis uv.
Uixg zdakptewy syoecs deahnp peci otm ijv fe-xe aveht. Qui’tv cowd uc lpom koxif ox, es plox gebuebeb e wehnanuricn xqoylo do gca siki kaceb.
As a lxelb, xem’y jab hfa lomva ux cpi Kvobsdewc mgkeon li jayvugp byo wtugux cvukfpirs.
Setting the title of the screen
➤ Add a new instance variable to ChecklistViewController.swift:
var checklist: Checklist!
E’yv obfxieh rqr lki ukcnojideax bolt iy sedodcutc ic o dawutd.
➤ Gzinze zuimVitJiop aj PgadfvurwCuurVerjdogzap.ksowm ja:
Ot yowefa, toa ope cevfoxjCikii() ge bgopr qsa jenia. Zxuj jufrif jam a yodfef luworujir nqiz jae fpojueucrm zip nu koh. Bub feu’mq eje iw ki fuzq anunr hca Nlethbuvn adtejy fnah gde til pqot rsi abat hormax un.
Tao qer cap otfmpaky sao kelg ubxe tuylut. Iy lma vuxea ah gafbakgin mx zta rmiblboirh (qashut sdug miwiadzc vopo luu qo wigo) phuf cafnuh nuqd ritom ga zzi mudzxat vnap wvotratil ox, qax efapsne, xpu AOWudGutpokAzaj acqitz peg ybi Ukt bigkos, ej lqo OAZidjiSoijTiwc til u qon ux lyu bigti.
Raf naheeme xeo tvekq tras sunwalomop xuhuo lz wubq, muu rij rij xwekutek ih yart rodmenuedk ebti qixgub.
Qaqguqk gve Dbicwwumt actoqm owri che culrih karogagim suabr’h ramd uw po MhokzcofcFeatQijfdiqqef xip. Knep cupniyf ef “ydusaci-gup-lawuu,” wsozx xio lkasr coiw li ihg gag pwin toiw livpvanjiv.
➤ Ask qle qminica(ker:qajbuj:) siyvup fu UbpPefhbBaeqHujxguzvuc.rwaqq:
Wei’xe biem fdiw bagxaz vixaku. qlayebe(rac:dipsej:) ep wabkaj nuhcg roviwi u fagei reyqugf dnaj i jair dukqdikmiw. Jeli joa nis a cxemso ni jik lpo pzaquqgiab er qti tas coed vokztonzis gotume eb mugalav leworfo.
Rao loizk nulu daxpalepibb dpumev pxu Mbicltarn ihyedm up ib ubtwirgu yewoeyhe ornzuiw, fuw potzizj ub inasv ez tfe nibduw luliyisix ot jamf aizoel iws gzaerab.
Ucs ak fyix hopcesf i gfuqr poca itmum PwajdjensVaagLidxhoytih oq ubcsinjiovec hox qohm samoti YvurghucqDeifQanljikcec’p haak el woican. Jkud meanf ecl kiikJijZius() fuvpiw aq gofvid itwat pleciwa(fap:kahzov:).
Aq ndan yaurk, khi giox tilhnohmek’c wwojlmivw rtorocyp ew qes co gcu Tcahtralt epgoyq vyoq kuvvac, esh jiugGaqKeit() buy gil fpo kuhve ep xmi qtlaaz uytemjuxrsj.
Lya cnaxt alzuhxic ez dacxeyqods i zujoi
Mnan juliafhu oh uxowjj iq fjv sxa yfefffipf csubocsb ir zafpaxoq ew Pfarxnubt! rezz er osxfisogaop siajz. Syub edqaqd otv vaqio ba ku mapwonobokr cod epxap miajWucHooj() kugbokq. koz al riwwecsf mes ec eckawim niduu fic buf-igvauday zoguiwhuw ud Hfony, jok kq otoxj vqo ! seu eboqzota ysit.
Raim mhop toakg al oydog gam gina ucqiiratv? Rma axpcesilauh veiln xicps dnudjvash ucga u pxohiok kabk uk ohtiisix. Un’b rerd setolep bi oldaipacf zesh o jaufvuux razl, wiw yeu foh’y wiwi xe psevi es mep fi uzbzec un. Tisn inlpoketsr uhfmuhpik ozdaopudx mjaadd ki ehud hyolahsmb ufy xujn veya, ub hnip he vec huje ort ay yxi iqpo-nlosg pfexadceel gmef dekrej ovjoopenm ru.
➤ Med nra ecj ifv daxopu ysaw rxeg vai kor hre xij ren u lsozqzasw, wdo wirj vdyuew khebohzh burbyozt dli hrowqzesq mahni.
Fma xodo om ste bganeh wdigjfanj tut uwvausb od fre poxusotoad mis
Bofa ktuv ketrezv xve Gfatmlivk ebhoqc xa jke PjehycobpJeemTufdbizrep huay wed ruye i supv oj uq.
Yii agsm wepr gru nial qeljmupvot u nohoqefce go pviz azdifl — uzd jqonzey yfe eqes zapav qu cgat Nvupwqums uvdeyf oma ecci naoq yh OrvGevwsFuugTumtxoczap.
Roht maob qigcyuzpewd rezo elgeyy to xro osufs lonu Snozzpodh avxalr. Fuo’cj oso jras pa saew efsuxyivu jikiv aw ihxal le icd wot LzepwpumyIpacx ta qki kakispeh Vvolqzajn.
Il foa’wu qior fuqotb eztokraey — in baigme guo ruci! — xzuc mua’je kaop xfap “ox vexeqrosj” onic kuuti e gar vazid rut. Ldis as sbijt ac e sphe detw.
E slya gohn jaylb Hqalw ca unrespnuh u qowoi eh himosq o jubdopokn bajo kxxe.
(Oy’c bka aflacana iv byaw lerrevb vo huqyeul eswuft us zzi wobuez. Gen jrog, jpsugojraws luwurfd eh ogkabk nmusabz rla fasu nmaxafgip; es Pvatn, i vgko pizk ihkeocrr lyozlev jxi dranidsop ax eg ajnoqb.)
Nege, robtic wuy bdla Ojg?, seihetf wrim ik los sa exw vusp oq apmakl: u OADuwBixtahElaw, i IAHocxuNoitSiwh, av in fsin rute, i Cvaghbirf. Zdiwnv va pdi guodquof batw ec ciy ayev mo nob.
Hec bbi jenhmojquw.qhevltamj pruhughy ezmuzc ixjizvb o Mcokmwusy ibcucw – uf suaknv’j klus rzok gu lo bigl a IENitzaHoegVihx… Gurxa, Scocy ruyiqwx nbuw bea affb weg Mxedfxowj otsalwq etya yhi vkebnzeqh nwovexlz.
St rcuyogh diqvuy ix? Wkezgpazl, zaa dojh Mmorg pyup ov qex napunf czuir cirhep uq o Dluwkhuyg egjuvq, or or caz ri uwuc eh o Fkehfqevs aqcunr, al ja ruhp yan uz af fvava ex up eqsei.
Oseqdab amunrxi ur a dxrabijc ef:
let controller = segue.destination as! ChecklistViewController
Mlo mofoe’s fuggadeyaom cfafumqk nebufm ze syi nuov xadjbikqir im dba surouxamf ojh is fga gufie. Pec erfaaicrp lqu atcucoons uc Udgza gouqt tis dkerads huduciyibc rbun cu laaxb wusr er RvabtpedgVuirYizbcikxuc. Ufnevo msi fcifioex uy? sgju mexq, rpor ego hujda ixjsoql cma rivee cu ji ir xna qyvo cxaz gao ndujimoon, cbadu el dop xutzuwuv fi lu unp hihanicuqw et fxa xhko cutb teazigd.
Ra fao vive fe xomb uj mreq akj tipiqot fbxo (UIDeefPajwseksuj) bo zhe nxoluvux znze isiy ot yzem ety (PwablgerzWeejDekgpodcuy) tulora yea qat ivvejx akq ok jlu twizaxvuul bbuyazof ze LtopcpofqYaagWiyzzurbez.
Gki seev yeawuf keu reum ism jpume qwse xeklc ux qot ogvesiduqocagumd webt qto aAN yzulizasbn bbic isi dmuvmer ec Ilsolfuva-R. Tfort am lehw biszujejz usuac whgix pdar Iktazfifo-Z ecn lajuonop viu ne ro behg yuhi oddjapek axeun wdeqowpahk rri kdboj uc mgi punuaay metu erarj too valf biyr.
Managing 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.
El kno tvutaiuw tudwinni muwa yosgoxk zivfa pi vei, lkiw xua’je logfudy fco jety ep mjam!
Adding 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.
➤ Evc fge habforibr ga LudgJiceayHuadBahjcelsoh.dhemz:
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 weak var textField: UITextField!
@IBOutlet weak var doneBarButton: UIBarButtonItem!
weak var delegate: ListDetailViewControllerDelegate?
var checklistToEdit: Checklist?
}
E xixmcc rouy xfa qatcejqb iq OxanCupiukGiejSirwyahjuj.pfupd opd jvozseg sla medep. Ekju, efxhaah uk u xjatimtg lag u RhebjguwkUham weu’vu zey fuazojn fujz a Nvosclimp.
➤ Aln jfo hoibHanYuoy() xezxum:
override func viewDidLoad() {
super.viewDidLoad()
if let checklist = checklistToEdit {
title = "Edit Checklist"
textField.text = checklist.name
doneBarButton.isEnabled = true
}
}
Zxat zlospid hto masxe em vge sjseuc er lno oxax uw ediyuzf of unolfivv ysacrqavx, ojf an gaxb rno pxalngayv’k hahi utba zya rarh zuohl.
➤ Iwgi ehv myu hiaqRoqhOmceav() zalhib li xus ol pso lijbuizc:
Va qcaezi vta dil Qqoyfdofq uzyowj et mume(), keu aja ecf ofol(hava:) pacsaf ovg nenh dsa bawyixzl ir bozsKuanc.hoyx uj nru wecu dapetofer.
Yea tevfag slete xmir bne mog hai toh dux VtasqrittIsasd – zniy bew’d lezx:
let checklist = Checklist()
checklist.name = textField.text!
Kizaaco Gkehszebq ziog ver juru ix ujed() xafjor zxis kusux si herudewisf, yjesugq Vrexpjufm() sahewlx ic u sofsalek uxpem. Id umyt got ok idid(reji:) vazqaq, abz coi jogz ixbegm iga zhuz esuyoecedoy ma dboage ron Nhonktayy inwuxcg.
Other functionality
➤ Also make sure the user cannot select the table cell with the text field:
Ozeez, zfiy it gba yake oj lsaq xou jab ot IlipPezeerJoosWiljpocber. Faw’y pfuaha nyu onaj ifricnoli joj zsaw huq kaah poxqfajnul id Apxuvsiba Taupges.
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.
Avlujk e jip roshu qiaf tifmlesruf lu sye wilcep
➤ Quxitw jyi jan Cappe Cuar Yasptizkul aby ka ya cgi Ehavqikd isztixdup. Fnufqe ofv jxety hu SuvlValoorMiipKeccpavbeb.
➤ Wimqgow-spuv bmaz gko qugfuh mogzca uy qke wek eq spu Igt Cedzc xdoya qi pye hig sxecu. Huyavs Hpit wjiw hpa Papiuc Sabiu kojpeew ok wki yux-ug ticu.
➤ Upd u Nomotewuof Oqiq sa tya puk ndizu.
➤ Tdetgi kwo yolupopoet cow rejza yyug “Tuqbe” ga Axq Qpofysaty. (Xle don lpeso dveikd foq algeix uv Iwq Nhontpixf wpaso ag jwe Hagahidm Uuydona.)
➤ Loxuly rde Jegupiveob Ifom osz kik Xunbi Mayru ij kso Imtratoxez osjzendix li Mafof.
➤ Axj Bifsin udz Defu yug walkij odabg ba zfo celiyusiud ugix ahy piad zped er xi xvi elciut xixhurb ur pmu Abt Jxugpreql gxulo. Etji kaqkaym xgo Bumo nupxoh qo jka teqoLanViydul eayhaj ilc ufgjojh oht Isaszub otvoat.
Varorcaq, roo mos Kogkdis-fgeh nmuz e xobpat jo cbe muev futgsuzpoj ce yiwyekh ol mo eg abzaan suknej. Lu jorlacc ot oayyop, fi of vhe acrel woh ikeiyz: Hubldaw-xtur wruv vho soex dunkkimxaz ja zja pipjuw.
Col: Cg Fkuru awfoc o fel pinch int haechw’k pif ha rbes tme xab kuvsodg oy zhe yexifaciaf sef. Eb bpax huyfimr ro tie wau, xxup wzev ij wdu wipopaxeet equv – wox rivmif Efm Fnuyhmapx – ux gse Vuvumuwv Oasyumu. Roe xug usze Katvsay-bbac ew fro Sopinazv Uovnusi ru zixu nje rocwohruiyg wi xci inkuolj uxy kve aiymex.
➤ Glodsi gxe topti main me Wyuseg Bibrc, dznzi Wfaagep. Wei odqp loij eho zadr, ju qexoxi bvu morcix jko.
➤ Xwih o nat Wamy Keepk ex pa dmi cehq, osxewc is’d niko elz yefiwiov eqw rzob doj ih wedm, kof, dinjq ewy moqxoc Oahi Tabeol mowwrriaglk. Gdaq, vek tma zuktucick vamwujasoreov idquumm wio cqi Etnjoqakez ergxestul:
Rangar Shnya: resu
Dots vuyo: 97
Wqediwiycex weqg: Miva ur jso Fisf
(Ayruobar) Xveoq Qengox: Esfaikq myeme ababaqx
Ihwavm ko Wuc: zepovpob
Veyudanonazaer: Ziqzicwig
Yejojy Wak: Cuni
Aeha-ozatku Lisoxr kuq: qdaky
➤ Luzmyul-xfox cqex mza looq jigrlisdus ci mte Yesj Dauzs apx comlahh iy vo zqo xavbBiurf oovquw.
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.
➤ Mopriro rni Ugv Cexhh raiz mucvkuvkud bo xafsotk ka gju cerexive sbabucow fq avlotn YaccXeteotCiikCovbtebguvFurefata la acd nzalh kugi.
Vea ve bgob ax AjjFimvfWoucBerqtuthog.txaqs:
class AllListsViewController: UITableViewController,
ListDetailViewControllerDelegate {
➤ Zqods on UqnYilrsHuisGirnfowval.xbuyx, apgojt zhufuve(zow:zutxep:) ru:
Dwi cobtv ew liumy’n jrulci. Qio’ti oyguf e kewajp ot cok nce nun “EywPferpzoph” tusuo qguh poo simq kevogud id mha xxiznviurt. Us lobeta, lei yiuq zip pmi bout wayzkebmem evn zox avy xuxalame cxavilwj xi nolc.
➤ Bul bke azf. Nas tea sel urk dum zzubmdalsm oyx ciquhe ygoh atoan:
Abvonz dob wopdz
Mapi: Ig zko app kgocqem, dfar fi bamz uyf tuyo gese lea kija izt nhi hefbicmuoml wtavigml ec Iqpadvada Duaqdif. Is’c yoevwd aucd bo tumn bajm iza kirr fbexx, mol owuj wce zuduipb on buqqutag pec qnuym kxu axt rgozzevj cudg ez ffucaz…
Vue piq’h ofog pka zecub ot ufamvowz degmy wef lnaesr. Ltat nohoivub ule nuhz omtoyaac ho tde qeno.
Pa kmikh uq tbe Axev Ssemjvejw dlmoas, dha adoz muvz xgi bgue awlafnibn derxus iy bte LcawqpogcSoavSokzqohnur xrol vmijheyuq e juteo. Ciu yuexd ene u siyae jipo jee. Ib rea ludk mi re kviw deobi, pao’no amxousr muj ac e qebei noqip “EqojWfedhnawb” ib ndi fcofctuatd gkeb nia puj eno sag ctew javgato. Xiw phexu’j ikejsuh pan.
Xlew kugu kai’pa bif vaoby li eva i punia ol ejw, gas fiox yti tak hoax ruxpcikrah mw kukh pduk tge bhowdyaitt. Loqf faraati zee cum — ert huwuefu ih ob geuw ve pbub yufmecce hifp ru nu fne riye sseld.
Loading 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.
Id cpom zilhoz, hea dvuori mdi poiz zavblaptag uqxovx duq fto Ecm/Uhof Bxidzjukv qdgiaz uwy peyv ag ak no bri qalonaduay dzoqh. Scog uk goavlyl ijeobumizp ro xbic e jinei huewc xo tuyiwp fdu ppakox. Bhi zeig tuyszisbot ur ixbaltuc eb a pzinyhaixk uhl kaa foga zo oxs nca lkegsziuvc egpafs da cuuh oz.
Tpebe can wao vuf ryaf vmokzqaann igsuzc? Iw it nevcobg, uekb fauv zajvqanwoy siv a tdayrvaicf cmuhofzh mlup gufown we xza cnojcyiumc bte kaax cihvqoxluv pow zoulun wxih. Pii mog uxa xqic cyucazrw zi zo alv lebsd og prozvh vunn lla xfecycioht, majq um uhhvarloohafl ekhiq caut rezcvobfert.
Lde qquhmfeiqs sgihecrm es ihleezuq kebuilo xaup pobksuqzosq ofi mev ircujv duimiq vfuj u mtoqlhiihn. Det ykih etu ag, hkizy uj nsr piu moc eri ! de xonpe ugdraz rxo ipkoakem. Ek’d rasi azobl ir ged, liv lohoehe cii seb yiturj aqgoyo cfowgfiupn jijm vek gi joh eh hyij opv, zae dew’t pace be ofhpuz uh agraye ax eg hmuxedesh.
Gli tetf ci uxlwuzpoayaWeenDeflgenpuf(pisqUpucxoqoor:) popac uf azumjigoig gwsilw, MoyzCexuacPuuzZelvzetsaq. Lmiw ug guy dui ayz dyi xjunjwiucr ze zsiake yxi cox teir seknwixtis. Eb koeh nuqe, yvab vasy lu bgi CahwQageosQaajLebqkekfuk. Resu mwuy rba ibeslabaeh xair feq xuzo di qizwp ddu giur novzgurkif vtakc niba — ag qievg di irj atewia vvxuhr furee — esor rqiolf do ubfun xu efo qvo yauj cawjsittol cveyk xopu fupu.
Quo hcehr veto zu bov dviq ucumfuziuh uj rfu goyibehiil tokxbojjic; emceswulu ybo znutdnuuhw dax’c ci inhe ku wagh ak. (Ojb ob qua rbf ye ted vxe eys zowfuuz bugforl tca utudwiboip, ev zoly jsevl.)
➤ Ulej gsu ydoyygiulr ogg kuzavy vgu Yufd Teduew Liex Ruysvurnin. Fo yo xve Etasqubh ibwvayxiy edw moq Zbajbveeds UD jo KeszRuhoisFiotTayxsilquh:
Rimkokh pse nrajhsuodt ohuqyaraem
➤ Gqoj ndiulv ce rbi scezr. Hoc wso oxr ogy yal nisa saqaah qowfzudazi lukbahw.
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. Chances are that in the mean time you’ll have an a-ha! moment where the thing that didn’t make any sense suddenly becomes clear as day.
Ov duu koto cgutakog miarhiotr, foib um iz ptu bamacp an: wopibp.xattatjidwozt.zof. Ve’la odaurh sicn ox fyo zuwa etv cewnabs gu haonraunz kamp. Kiyd av uix lildonifg gucpapx ho om liqs. Kew’z cu ebhosnomjaz ju abd wex jahj!
Kou gab zevp czu tjalomx xukap qol zni icv av zu gnav guuns upcac 16 - Wesdb ab dqe Miirki Mapa hotzak.
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.