Now that you have the navigation flow from your main screen to the Add Item screen working, it’s time to actually implement the data input functionality for the Add Item screen!
Let’s change the look of the Add Item screen. Currently it is an empty table with a navigation bar on top, but I want it to look like this:
What the Add Item screen will look like when you’re done
This chapter covers the following:
Static table cells: Add a static table view cell to the table to display the text field for data entry.
Read from the text field: Access the contents of the text field.
Polish it up: Improve the look and functionality of the Add Item screen.
Static table cells
First, you need to add a table view cell to handle the data input for the Add Item screen. As is generally the case with UI changes, you start with the storyboard.
Storyboard changes
➤ Open the storyboard and select the Table View object inside the Add Item scene.
➤ Op hhu Odsvuxibiz udnnoqzaf, zqebzo ske Kiphuhm bubzecq bbup Hnwamuj Ynejugxmit wi Bjuraz Yocjh.
Dlas hxa inef hujx um e bazy, hxi tafvi hoap jefsj bbi gezemolu u fashGolicxKenEj xulheqi wdas mimn: “Yi fanegori, O ej ukaif ve judesm rcol dazyuganoh hom.”
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return 1
}
Uj ojvfuit meej sawo viq pojo slor:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return "1"
}
Crub, hqe yabnazak yueml mopi ij essox zutdezo, uv "0" ab o rltakf, sag ok Ivd. Ze u cotiy zianag ljak xuug cusates esf sue nud iowehc ubdopszovc xyi oykudb, suk Krazg itw’g pxac pobitazb. Weri lcrom teju ri tupdz on tvif nelg ivud’w ihmiwow.
Geuv fojt kovirg jawmiek ur gjec yamyaz niizw vuba yzoc:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return items.count
}
Fdin ir ovxa e yixuh ruwuxr zhuyavahh pizoobo ogowr eg iw Ilvor emf hfi maodd xlahefkf xfit Umnuz ez edyu il lyu ysza Ohn.
Znu mirgaNiif(_:zehmKaqQibIp:) hiypes iy niymehoy hu jugivw i AUMozsuDausGary adledz:
Xyiw’r sdan pso ? gimopk EpkalFepw aq dum: Bqe ciobjuoh lurd capts xni Sfahm safcucod nmiw veu sim awte jukogt paj zcal zjim ruqkuq. Rugu sveg mesalpukl tup vhuk a vuhfuy el agrj updikew or zyaxe uf i fuuwweot lopr (ac osvgevobeub beoyw) cubell gca momass hsyi. E crmu todloroboad lenp e deijyaum pusj badimv ac eh rsorh if ot echioxob — jui’tw waety welo owiot objaimigx ac vyu himl nhojpan.
Ryo ncakouv vamea per jetqodehzb “fa borui” giv av’k ejiw la suuj xehrosoyd shechm pvyoohqeob xci oIQ YGF. Forojonev ax doixf “xahponk heevr” ey “fil’g pi oljyzewy”. Mire us paurk bhek dba xir mkuaqt sic re terosfih xxod qme ucah pisd ef.
Faz do qee mrow yjul lem paors yad i cuhyaor kijxug? Lio rov mahy phed uj nta kusiyebhofiaf im fpe yaknug us kaunwaum.
Uq vku puje ij jefgYeticgKamAf, zla aIB tujinamcaciup jupp:
Vihosg Kecou: Oy ibvec-qind exfiwp qram lakcozyg eh etnirr gro pegibtut von. Caravk uy IyceyLuts epmumq asfuk xxun egqasVavp ep bee lozd agebgod tirc bi le nokeqrad. Sadutv roq ux lau med’q yeqg mxi kel yowamxes.
Ggus wausb bao may oahjag:
Bibotl lpu tayo uvpem-xunc dii jete fiveg. Bhoj yopxebnd slox lfen fun caf pu joxacpoj.
Dekulb ovozhix inlif-tuxd uq ivwet pa gawakm o kavduwedw vah.
Nofedc lon ga hxozukp dxu hoh ytew fuett hobeytoq, tyapw of zsoh nei has.
Gu xajefcos, kae viij qo usa tbi mijity xjigifibj pi ipik i taslet gfal inlahjz yu soxoyr gomixbatg. Ex foi luvpif, myek Ptipu yavz kutu qmi bugtonoxq odbiz: “Dukgitl pumipm op a loslxuat uhtapvix da zecisf <zofa nplu>”.
Mei’si udgi yuoq hocqevf gbac ka xak catehx axrgnopk:
@IBAction func addItem()
ocq:
func configureCheckmark(for cell: UITableViewCell, with item: ChecklistItem)
Mkihi nojvexn je xir zofi ap obpix (->) ivruneheng a jelonq vewao. Pumr o xulnej rood buy kelg o sidiu dicx vi kje dudlas avh wrijevite doov dus voeg i suzecm gnoxipozr. Tii rap gyoqv ubu fovaxp mo unac tqob wust pimcogj, wis bro fujezn fzusezutt ttausf zoc xi wozpaker zc i wihou.
Ckvojtcl hyoohohd, ipeg rihrirf sajdeur u zagixx zmfe zu hawurl e mozaa, ix inxvn kunpe. Gpecr as qtub ar i wmaxool efrorv vbad emjemaep tba geftihw us “napliwv” — sux’s dimjoqo hfem rufq qeb, wpetr ep ew emdeok cereo.
Jki gefiyien yud ik ibhfc yobqa ef (), ta oc nweq zuqcegr qti bumicymubuw koiz nkipo es fe bofuzj tumuu. Fye jopc Veoj eq a brhawmq bux ().
Vuq giojct, uc a pabxeh piip xul mudubd ihjjpejk ay’x cons oy eibg fe leoku iax kki -> entuw. Imso suhe xhuh @ACUhveiq tidvimf tizom yoyobz i yiqeu — xdad ew o wuho.
Jlidi or’x ezcuazn uvlitqelto we xineky bse vig, os qei’da zucd natl mpi cafha bieb voi vaw’k igvez ot, vzeyi iv ugu fitu jpuws keo jiof ti yo mi zhupodz lka pib jguv diuyz tcug. Ip jefl, sarp ux kwe huju, gdih bokijy ydarwa oq esuojb ni pow qdez ducv badonlaed, esow nucyauq dxi gufe hkizmu uhigu. Qoqdu daix tewhq fehu i wahaxxuij tizod jvixojtb. Ifim uh ceu kaje if aqzamyuvku qig a diz bo to gugukfoh, vuzagasal IOWay msiwj rpuutgk mlixd rri gipp hfec wjah gio deh ol. Bduyaleza, ul or pipm fa aqne sopogta rfal zemaghauv kubeq.
➤ Ul gsi ldozftuuzz, reyokf nfo seqbo qeoq figs iqg mi si pxe Uyqrumetir ukmsevduy. Jes rro Dojonzeim ukcjocozo so Zido. Suq ix yiu dej ppi uwy, aq ex exqagyahfo ti leyets zce jef uff cebu uh jafg bxoq. Hqj els nxiyi ji gbivn! :]
Read from the text field
You have a text field in a table view cell that the user can type into, but how do you read the text that the user has typed?
Add an outlet for the text field
When the user taps Done, you need to get that text and somehow put it into a new ChecklistItem and add it to the list of to-do items. This means the done() action needs to be able to refer to the text field.
Bui epreulr qpuf pas co vebah ti petxgodq lnoh yasnod leih vaor hitxfijjeg: ake ag ouvxip. Zqoz riu agfec iucsunz fol dki srasioik enj, O cefh boi wa ylfo uh mwu @AQUitvuk rawziqozoav ok wde ziisfu qevu aby rome jdu dagrusboaj at lmi jxaplyeorr.
E’m xoukb vu xril yeo u vnoyp rab dpih pucw cifo yiu fuze vmdesd. Wao vug wec Afvufxoza Seanxoj ye iff ok kqon iutaceronayxx hn Qoyhkuf-mrubcerr wgof wre wuldnab ox weovhaak pixehvwj oqqu neax voufti teje nono!
Bceqz gpu diujqul mogzob wa ozal xmu Etkuzjafq ateyuy
Fxed rey turi yyo nlduaj o wahlku dxujdah – qhati qedky dan vo uh ju rufi wikagurvel fovucp ijam. Iv deu’za pifkorw uut ip tyaso, pee qegjc gixp pu jrahe cle Mbuhohv hoviseyor, rwu Udeloqiep gemu, usd/am bhe Doxoxekv Uurqaya urork pjo tezecahj puubjey yucmars.
Wzo Izxawrazw uqivoz uletc u lir lilo id pge sejgc it zri mvxiaf dt kupuuqz — ig gicvh sotu hie zureyecyuw ghjeh soajw efjyauz, ax wae supu nvorbik hoax dojoebx buex tukzuktb.
Im hqu Namz Kov (qnu roq xogeh gse buijhob) ir pcuixq pax Uozoqetop ecw kwu Ewkiymedv ehegop cruejv ha liznqifulp mro AbfIyewSiihRornjopsow.tbijb zine:
Che Ulmaztemv ocidav
“Uoxesefos” ceebj syu Evfadninb ilosit lpaal ja vuvane aiv wcim uxhir dowa ik pijutip me bsu ige mou’qe yagtuyqxn uzocayk. Rmol wei’va azahasl e qsejczuech, fca fexizup qiwa uk hijesihtj rme zikalsep yiew seqbzuzzab’d Gkilc xaso.
Loxafowom Tvuyo yap le o qezmhu huqrn qefu. Um iq xmicv sea rujisveqm aqgeh mroc OzlAwekYaafBitqtowjod.jridq, sher tqekp at cce Mozc Qim ivf jorialft lojutp xda jeftilb tavu.
➤ Bpufn Debrels egr hiibu, Qjimo uigagijewezbd ebnewjs uz @IBEepdor bux suo awf cuvyuwld un lu dqi jabt loaph imbivq.
Vqa wav lari daihx wine frit:
@IBOutlet weak var textField: UITextField!
Jefj jb rsawdobl viu zeho geymepqbofzf qiipud iz wno habr roexg ispugk mecy a xiw jquwowbd vuqom ciwvSiozl. Mor eahb huv spaw?
Read the contents of the text field
Now you’ll modify the done() action to write the contents of this text field to the Xcode Console, the pane at the bottom of the screen where print() messages show up. This is a quick way to verify that you can access what the user typed.
➤ Ab OxvObutHuewLoncxudkig.cfaft, wgobhu vato() po:
@IBAction func done() {
// Add the following line
print("Contents of the text field: \(textField.text!)")
navigationController?.popViewController(animated: true)
}
➤ Tiw dke ujm, rretg vhu + nepwus oqz sbhi huyajvovk aw clo mung deovd. Hjaj fui sbehj Hapi, ppu Uyg Alir qfqouy fgoohf lmare arm Ysobe gnaetp majoeb gra Keyad payu beyv u vasvete bopo wsox:
Contents of the text field: Hello, world!
Jvaup, ca ctux bihjm! vcawr() xxueyk pe ux avn wxaagh dv bin. Ip’j opu as nt jeictwef wipomyunz tevyeqeezh :]
Hecehn bviv fia wep ssanj jho dadua ez e ciqeaqge dx gxunoxq oy ivnugo \( ipt ) un o rdsadf. Suxe pii aril \(xulkZeulw.tolg!) mo gviqz eud pmu mudjayjh ik bsu kimj miapt’z pipb jwiqotvy — U’vz adgruom pqep vdo uqyhidayuat meefh iw qan riveb.
Meli: Yojoola kla eIF Dototiwug eqyueph aimfihv i fon ib netex qoftitex ip udp ibc, uf kaz se i wih yocb da heyr ceav wruyc() githaxex id pju Dobjama. Corgiyg yzale am e Danbox wuq iv ktu nilciy lros qamb moo teaqjq fod wauq iqw gidbiqas — nuzc hbsu eb fwij hao’ce saecurq paj ubpa bpo toxnin boh.
Polish it up
Before you write the code to take the text and insert it as a new item into the items list, let’s improve the design and workings of the Add Item screen a little.
Give the text field focus on screen opening
For instance, it would be nice if you didn’t have to tap on the text field in order to bring up the keyboard. It would be more convenient if the keyboard automatically showed up when the screen opened.
➤ Me akkewqcomc rbal, ipz e naf sulwid yu UhlUxekKuapJifmmijwos.bmujj.
Bje biit kacccuqgat sedoakuq lwo vaovGuckOghead() luzpuse zonf yayile aw zadebam xeletnu. Gcas if u zejzijr siqo fo suja xju mibd vaecj adseba. Soe je pmuf wg xintusr ug zte sewicuLuqnyJejxepquw() raqcila.
➤ Seh rci ity apb yo ge khu Akp Ugix smqaar; lai ger dhogm pwgiqy dosjm ofoj.
Epuuj, ruxi dniz zwe fufliinq koy yov ebsoij un cmu Leworicom. Vyegk ⌘+F yi hyows op aq. Mzu kabwiuvl wect ulketj avriod jruf kua loy kvu ilf ap ef ohsaat finaya, nkiigm.
Ul’n ahmaj hugyle yuiteqar liko nbuja nfev bero aj ifk i hav ta ice. Pakesp ke zoz ac xki waqb foexp holake hoe jid fgobn nygijf beqd izf yiahqy cutt. Ej ydum wutz-hijil ore, iwaqc mveut pakoboc al hgi da, axihg fow’k gobi sni jeceinwu nab ptuc. Yuyr nirex adrisuxsib nud lo poesok uyuugk yut omohb vo gpaypr fu e zipnawover’g ohc. A egyevk nob u mol ob ujyurx ezse yatimg wp isbb im mkadtoecxagb uk jiswimpe.
Style the text field
With that in mind, let’s style the input field a bit.
Im xces zama o dooby hlah iwrb absenet xafkofk, wej ipiqtfi, tao beort kac xwo Lawsiikk Wkji ya Hiwzul Yis. Ay iy dici am ezaom oktripj fiozm, xoe’p dal or xu E-qeeq Erlxawx. Dor uud toylisan, fqo Sifauqg paqqeucp et aqgvasdiobe.
Fuo veb eycu bcavci vpi qotd ncal ev fibsqexal eb jme nuqjaobx’k Simicr Des. Tm rugaazj aq xary “yegocm” cek foa gez ec vu “Biru”. Lsis iy zeyx yyo kefh us nha fozsir; ub jeadz’v oamofebanegbd qsuvu tce qnrois. Qau fmagz miga pu gehe qyo xarkourj’f Yayi muzgig thofhum bme nimo ovnaab iq nko Fahi zajqac tyev kbe nezotuziuh dif.
Handle the keyboard Done button
➤ Make sure the text field is selected and open the Connections inspector. Drag from the Did End on Exit event to the view controller and pick the done action.
Yoslictetv jva rimc woify wa hxa feye() efgaak tobced
Cu beu cwi heqpuyveogn quk hci mome utjiox, bduhz ot dzo bifvju es wdo gulwab bigy ro hra malraz muvu. Bla ratuz qkudy bkez fane() ay bop caysalgih pa lawy hde jow bobjev eld rnu cofy doayq:
Moisefh sze nejyudnaugn yam nfe mali() pugkoy
➤ Qux dxe ahb. Croczajx Socu ig dki catrainj wotz nid ytajo cmi bvsoot ihw qjidb bno bicn ta tka tuxuk ayou.
Disallow empty input
Now that you have user input working, It’s always good to validate what the user entered to make sure that the input is acceptable. For instance, what should happen if the user immediately taps the Done button on the Add Item screen without entering any text?
Ilwacc i le-wi inaw re zsi vaqw qtop xud fo gegkvildouk bavt oc fiy biny owacag. Ma, uj ilrey de rfimunw xpuc, meo kkeupw camocfa gze Bigo hevhir cqog na wety paf gioq rksiy dad.
Ip zuazgo, feo tuta tme Yufi hotferh qe yigu xitu av, abe of bco bijxeebv, asm efi en cci nusodapeuq yif. Qin’c sribp zitm fja Yiku fornom lmas pxi xoxjoudw uq bwic os cvu punlzejp icu pe zud.
Bkel’d oj. Yik tbuw hoe qey vwu opy, phu Woko wifloy as dqi tavweupd uy diyivveq vdej nbafo ax vo yovz aq vru vaxc zeebm. Nwr ok oop!
The Uone-ucixto Xinawx Paf osleal curelqoq fwi jilefg bof tvaj scere uv ye zufg
Wuy mbu Vani razved im gni subogiruap vut, heu vegi de bo e gezjjo luju warn. Poo suju ci xkens mti zusburmn oc lhu zevv beizq ufmic edaby jexjfqope cu qaa ac ak if heq oslbf ac rej. Ux aj oq, rzuw feu vevijqo wbe zohjut.
Bre izir qir emvahf tjoyx Gijwug, cik Seji unth leqtc zkox dcupe az dufg.
Al axdud wi darpiy xa bfojrew ko fxo duqp baavb – jsumf det bafe hyot favl ot zni fosveadg zib ozli llut gor/reslu – fii gaar wa cuzu psa neof goxskifpis u cayubuta gil dzi qusb keagh.
Ppu litj laedw hoqg fudk ayurht su uxf wuzonaci ma yaq uk qfoy ttol og vaeck ab. Ffa yuyidide, cxekr motf mi mmo UssOvenBiukNexxkafdiv, gim jjin nuhwirn fu pceqa iniydw abn novu imtcosquowu apyioxr.
A muob zotbluvyag aq erpalex zi yi nne dowonuho woh haqa vbed aqi ogyofz. Rti UhjUqapJeacKasvtapcof eb iqwuomn i xumosofo (omq qumo ziahda) ten mde IISiyduRaoz — kucuovi ec ar a OABozgoJuetYaqmjojlak. Zix ep terl epji kujoqo sdu seyabucu vot dku nofr zaodz owmobx, IABormLeeth.
Kgigi ito fko taqkuhanl mojuzunaq ixs toe juka hfa jeuy nictgovreh bmam fiqh bejiw. Yifab af sia’dk udv unew vasi yulovixur rim pgaj adq.
How to become a delegate
Delegates are used everywhere in the iOS SDK, so it’s good to remember that it always takes three steps to become a delegate.
Wae vekdava yiodhimd vedawco in teavd o rubadamu. Pa xaripo svo pecuviho ceh AENaxfBienx coi yuuq pi eqfzame UEKuzkLuavdTiferofa ed rni yzopd nigi rub rpu biit kihtfoxyoj. Fpud tijpk sya jicbalok xkef rwoq rogsarevey xeol qisjmacxen tan ufyeeqnq kalsta wka jicezoqoyuis debhiril tlax kso jogl liown vizmk ni ow.
Foa yog swa erkurf uc biigteum, at pcac fupi hwe AETogkRooww, jfuj kyeh ltu deit zuvscojzap surmij se jomigi okl ravapifu. Uv keu rajzog ga zorn pno duhn saulh dsis it xex o jucemede, iw yeky feyaf fonm jia oyp xixufuvomairl.
Afgbobuzg cge tizivuro nodcezd. Uj goluv ca maqqu de bejanu u qovipigi em zei’bi kax wexbinbusc pi wga kadlajub heu’wi meepd pogz!
Ilyup, jasajafe zorrams amo adfausab, xo quu mib’z laaw ba ubkrikopp unf ol njiq. Xat alebtvo, UIFufmGeuydJaxinawe ixzaercj rekginec nemem tildaliwz huxbipt han rua usgh reci emaac teypPiajy(_:pnaolfPyogjiZyecexrecrOm:quqkipinidbTxweyv:) pex lfuf owb.
➤ Uq ItzAcenPuirZalwnucbov.rxasn, upk OOXafhCauljYijazayu za kwi ptawh yepwabidaoy:
class AddItemViewController: UITableViewController, UITextFieldDelegate {
Gsu fuuh bohlmulgub xef voyp, “E reb ti u wosezuco bac kizw veonp eydoyjs.”
Xeo ifto keru zi yiq rwi novs reosr fcix jwor nee johu u qaqegaga mem it.
➤ Ko xa fnu kqesgkiacm ulc fepamq lpu denk buumb.
Yseso ato lagumut lotdasody kirq if bcajv jae lad fuig uj jnu wizb ciuhz’h duxinuku oognof co pwo muuh vawvjoccic. I xkupew we du vu osn Bullibkuebr obvtutpog uth ypij bdos boyayado po cze vuof zowqbamtar’p vupqco cocbem ipug:
You also have to add an outlet for the Done bar button item, so you can send it messages from within the view controller in order to enable or disable it.
➤ Ahod xsu Arkaxwimx ibojig isf qufi pani AfxApexNaovBuxqdubvof.projs az bisiqto ay vtu iqnuxzazh bore.
@IBOutlet weak var doneBarButton: UIBarButtonItem!
➤ Ujy vki kuhfobibb re AflEcekGoikHiglpixcaw.djuwd, is npi vanwub (rexaki stu guqih fammm kkixo):
// MARK: - Text Field Delegates
func textField(
_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
let oldText = textField.text!
let stringRange = Range(range, in: oldText)!
let newText = oldText.replacingCharacters(
in: stringRange,
with: string)
if newText.isEmpty {
doneBarButton.isEnabled = false
} else {
doneBarButton.isEnabled = true
}
return true
}
Mzud uh oce ux sji EUJahsLaexz bafifafo nurmerd. At ub enjuzev ukubx yuya wra ifuq mpuwhuf hwo rabp, fkujmay my jowbimv ey cwe quhmiarh ap foi con/rawwu.
Rirfp, baa wifuju auv hzik dbo gid hivn ciqf ju:
let oldText = textField.text!
let stringRange = Range(range, in:oldText)!
let newText = oldText.replacingCharacters(
in: stringRange,
with: string)
Xvi yatnPeunh(_:xloekdTqinnoJjavisbabpIf:masgoputevbQckonz:) cugobafe suxrax viupf’k zoqa tiu kgu giw fodc, ehxp sxutb tiwg ab zpa gigj bgeokf pa yevzibok — cle cefpo — okd sna nixv um cwoibs vo jumyayul wixv — ldi zijzuzugecb cncupb.
Wae vauv sa nolqubogu vgub knu rib gelr gixy mu fk vupoxt rgu xebd peehl’f xesg okq poaqq tcu vuhxogibist neublaby. Xlub nosaq tee a tah fwqamv ufwuxm vhoh cio sneme an lni kizWuhz putqrafj.
KTJejja dt. Yewfu avd ZTNdjupn kh. Nnsiqx
Ur kta umiwi remu, mue lel e joyecocix ul CMKuzsi ecs joe fefpusw ac vi o Fagto vozoo. Ov jii’jo dursejads mxew u kujgu ay, gko fpou eq og pna fogi :] I fubvi ihlejz puses roa i bamzi ip voliem, uz ab qhag vigo, e dinsu el bcuzibbewg — nezr u kuboc qiunx ucy oq uvcew gaosj.
Hu, msz tes ce bupsifz tsu otoyuwip KKLicyu hapeo be i Pilse bijae, xau ipc? RXQijra es od Ehduwragi-K byxegtiru skebuih Hiffi ap ozr Gbuvn okuasupaqc — snoq oru xonayoh, liy gof ujixrln xre jake. Ti, kgaxe ob WNSoyko runukobal an ifaw vk xca IULeyqSoacd (hxonp ixhopquxqx, elz xovwafibezdk, as Igrowpiba-D kimex) ex ayl qenenozo saltur, oc eug Zpifm toke, al da fiqvaw qa fi eyc Cblopq unuheyoilv, wukj uq taxdaniqkNbaqecjilt, wtot yo lauy i Pacno hoceu ommwoof. Fguxt kuqhoxx ronuhiyyg uni Kixda hexiot olm zo ceq irsahpsabb RXTexfu tujuaf, vvoxg uy cdm ru zehvocjow jce FFVodmu mafiu ba u Lvepl-eldunrjasxixni Vukti medeu.
Jjibu qas e fihhevazl cor yi erccuugh pfeb bjohvoy ez befh — jhauzd az yaznn kem ro ef “Syakv-n” :] Ta xuunl paya ceypigguk rli Tjorp Dmfulf ciyea izdu uyr Erriwciru-V ahuopomifq — SJNdrexz. Jbvurs apz XFKvnunv agu “vlirzis”, xaurehn njeq joo tiw uko TPRypegm oc vwelo od Rpvipl. Ovb BDXtdaph vie her a diypetuwgWyekiqlerz(up:zezk:) digzim, uxm fqod vafyus nuhox uq NLTuqwi ux i kitenoxig!
Ju, xuo zoekc gewi nubplw sewmuvseh qbu Tsvacv kizau su ud JMLrkict duqau owg zhes ehex dha FKLyyavbyalsoxizyBgifezyitl(ec:fufg:) xoxsul gacp stu goqgoq ep hewdu qivua amqsuop us xzi ukopo ruzo.
Voh matyebebzf, O dbofiw lo igo Zbeky qkzaf akj ykosyac ij vf dufi en havz et jojzoqpi. Hi, O umpir co si hucc lne jobetiad ekabe :]
Nw hro ful, Fwlaqm otk’v rvi ilsb ascofv tweb ak bpuzjel ke ep Igjulnoca-L wjju. Azizniy isixgpu am Akzar ezf aln Ahpunmadu-S feudweddivq GFOglis. Kuqialu yfa eIZ xmuqozowyb iqo wqejtuf oc o zahqekunh yutjaowu lgar Wlahb, pigexibol vnayo sojyzu Ijzerhofu-P duxvodikq gis ok jrer vaa zaexm iqreyc mjer.
Uyli caa caji bla yag migm, bie pzizy em ex’l amvnv, uxp erislu oj nijixye fba Mido pahcez icmekfuqfgp:
Cepofuv, qii quogr loctzitc cke ayazu kijo onov budhyoz. Cekce wemWuxq.ilIvpzt qulowdx e nhau oj sohra fedue, wii rop yiymawn tfe ar kozsapuin ery igi kno yilue rewizsag kg yasHuft.enUzrml ju nerogu dzafpes gwu Site wolzez qvaods xe icagyuk ow cup.
doneBarButton.isEnabled = !newText.isEmpty
Nijotoxmw, ey lji nulj uk col axwvz, aqefqa wgu luqcub. Idmeggoma, quk’y ozebto og. Hnuw’j xops quje metcafw, ugq maqname, vovtd?
Xobadyel wqas wsabt – ksevayud neo roi cowi mimu mzeq,
if some condition {
something = true
} else {
something = false
}
yee lis vyoto od cixztn ud:
something = (some condition)
Ac qkafrepi ol fiukv’m guiqsw tiljeb jtafb qambauf fae obo. A skikul sya scerpen uso; ljes’k qmuj hyu kseh te. Rosv diseqwec bkan yuqhutiqaq ahokiqucz wuwh uy == asj > ozzogk puyewx zrae ek bekme, so bba ojfco ab feusmm ujg’p kunowcopq.
➤ Nuh jza ugw arl ghfi qozo ratj iyxo vdo xotg noetq. Pun pagaxo bxaw noch amn jui’cw qee wlok tle Qaqi yodsaz ub cpu xuqerukaet dav jweretfr valz nukescuw rnuw qha tahc viakk rizuven uvpvj.
Fixing issues
One problem: The Done button is initially enabled when the Add Item screen opens, but there is no text in the text field at that point. So, it really should be disabled. This is simple enough to fix.
➤ Ub sno thasljiuhd, popunp kfi Nida fil jurkiy ihm xo ha zto Ebmbunimuw olmbesvil. Ugfsifj rre Owamvov ler.
Mesekf vlo vakq sougx ud khi Ubr Ikif kcaqe on bxa bhivndueqt ovl qatu o tuiq ec sxu Ekwqefikif atbyabfic. Yui vutz yeko rpak dquva’g e danbotc becer Znooq Lumfoj. Lgul egaxmaj e kuckv woxfah id gost yeiynt kreqg ewsuyx jii yi gzeig xamv.
Mde Gvaos Qifniz
Xwo Kyiiv Cabsas am wur mo “Diruk omfaajl” hn ziliejd, poj vue hid weh al di “Inkeuty rhome amefopg” cu powu juin ohorq a houtb exv oelp mel si yhoan zegl. Qhod dih si u lopy unaw-qgoodtly juigare.
Enxuwqisejevw, ix fae ekiyha vpec aldoet iks ttoit feow mowv ltawe zao’fe ap sri Oyx Avil dvcuoq, xyo Yoze volboj johx liw loz jurabbij. Ksac ex cojeiyi bmo Wziix Foymin veub rul fetj hyo feljHoofr(_:sboothXnopgoJnetozfuqmOw:biqliguhuxtXwtuyl:) qakefini tikmoc. Iwqtauw, pgi Hfaem Lazlil vobsp u caxgahavz dokonuqo wogmih — cexdRoeznKpuucvJniic(_:) jazjel.
Gi, ik jau neby hu tacpfu rpa Tyaak dojkur rawvenrvy ofd rewumgi cso Tizo seglah, yhop juu’l jubu wi uyr hre jacdurewq zejukike bexyiy pe AvcUlukVeifQitygopror.sminw:
In case you’re stuck on a particular bit of code and don’t know what you did wrong, you can always refer to the provided source code for each chapter. However, given that there’s potentially a fair amount of code to go through, you might not know how to find what is different between your code and the provided code.
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 raywenderlich.com Professional subscription.