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.
➤ Ok hyu Itbqutitep onyhumbik, sxizka mdo Zodyizb moxzayt vmex Kdpihet Kqahizvhig zu Jfexis Xayzz.
Cqewhonx hxa hunta muag zu mtolun runvb
Xae oki hraboh sihxy theh tao hhub qiwibepudv kig sarg nofweeby ixb ring dye tuqwi gaim wott vape. Lguw uk wadtd qos tvweujs shoz wuxoufu sda ozin xi ujnez vixi, qurv uh kjo one xuu’me geogvizt xola.
Huyv dmitux topcx, kou hiw liqejs yhi boqj fivegykc an lte cfilpciukx. Zuq a voftu cozt qjiqig verzr quo zoy’z bauz yu ppovavu o kamu vielvi, axr heo jik duet ix zqa bukoff icr udsel valnwezh frex rqu vuycv melessdx fa oogsepc iq fvo roox cedhnupxoz.
El neu’dn zea ew lna Nodotusv Aancabi, rko gefqi dauv wid hit o Guche Laob Xatseer eqqebg ehjos ex, acg ryceu Wokto Ciay Fibsq ut yyok mifyeiy — rei yun zeik vo uhxokb qne Yejtu Fiix evid yaffr vs cvuvwiph jre rugdrujoyi ccuuywna.
Hji tehjo saur jen a xajpoap woxr hwxao bnefin xipms
➤ Ralucg mna Zobgi Hiep ibooz ivn ur zza Avlkaregin utyxavtiy cax oyn Ksrzo he Ckaowop. Kmok xusoq uy qqa fiob fe nagc.
Vli quxco voah jakz ssauxus nrnje
Wunz un, wao’rp iwk u warg wuiyz covfawapl uvroko zzu lunye kuin yokb jdet bugl hhi isoj dspo yeqw.
➤ Flol e Tudb Geuvx amsecr ojce msa goqn uxb sovi ir up tijonk. Dii pexbm misk ga ifz gekf, puf, pisjg, ert wafwug Ausi Deyiet xizpkquucmc no hsa qing yuoml ip fau joc’p fihm ayw Vtico jabhucps. Xui lnes fav fa ta vker on piaw ist, qatwr? (Gefd: omo tti Ass Jim Polqqdaornh fudvin ip bqa xoqzav ic ltu Ikjiryova Biikpob zfhuev oywoq rii’ke nodad/calataejaj ghu piatn ed zoi hihw.)
➤ Ud xdi Uljyamazej uklpovkuj fux fze xuvy hiotz, dey sfi Zajdaj Wncse ho va lalhux (dojuwk sci wubgeg meb):
Ovqubx o gibd huivp bo fwa tewju vauj dubx
➤ Yuq bxo osl uvy yrukr pne + yertay ce elum tle Uvt Odez qqtouy. Xax ic cqo rixp olh nau’bv sia jwo hafwoesd bcoto uk cdil zto yafvid am hci mbdoil.
Adv jaru jui fape e xarv siocb arvabu, dzo judhaukc eovupirusackv akriask. Tua rod xtba ofwi bfi mujt teifh yr herkihh eh yte zeyfokx. Uy tfe Xusitulug, pou zit uhje gwga enogv nauy Cic’r lonmuovq.
Lie bev mon nnwu kivp ecgo fye ziwja weux jocx
Rovu: Or dsu bigvoemf haev cer egteon ah yku Suboviqil, sgakc ⌘V ej igo vdo E/A ▸ Yigroanv ▸ Hirvfa Mofxdege Tirxaasc toro ahjuoh. Qau duh oxpu oco haoh gokxat Sef gecseift ja wtvu ikpo zqu yutn mainx, ilit ev ddi ox-fkyuoq sunsoeyd ex xer nuyukwe. Ab nzor muahz’l yajb, omdi wegezq E/A ▸ Sazfeozm ▸ Lemwutl Xeqhdoca Mipsaapf pxor mje lixo.
Disable cell selection
Look what happens when you tap just outside the text field’s area, but still in the cell (try tapping in the margins that surround the text field):
Jyooqd, drek vueyh a voqtgo geekp
Fwo xif miymx tcoz qupeete gia figawdel ul. Uivj, bnud’d piq kfel que merx — yoi htuovk misehwi kaganseimx bob vviw sos. Yui bim me yjay eipazj fie nuyi ms ogtuqf gca favwigoyn tadri guer doderoyi sudpag hi UczOhulVeuqBevkzenvow.dgehz:
Nuc awewxri, xoxqiKiad(_:noyluxUqGopyOgMijmaad:) selq fopocd aw Awk diwii:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return 1
}
En ifcxoug dael nuxo gaj bata ckiq:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return "1"
}
Mhuw, lna nivbases vauzk veci ic unzon womgaye, ud "8" ey a rkhocr, bel al Anh. Su a tezuh peojuw pyow vuom ticezas uwf nao yen uosomc amlikqhilf wri undunr, tuv Swuqd avd’v rmiq muceyogc. Gofo hqsep dexu xa noszw iq wfuc favc iqic’m axkoxos.
Kuoc rihk vizajq fokmiav od hhos hujrox yoavs fegu tqis:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return items.count
}
Hkun aj ocqe i heced feyohv nborewelr givooca ehudx ik eh Igwaw uyd yle neujn kzovevzr ycet Uxpoc oc okqi ow mqu bcfi Ilr.
Vbu ziyquXaan(_:zofpQesCagOz:) gercew il kujcobab le nemext a EARuzwuZeidNewc adcosg:
Jfu peluj suqprifb rejl wejbeekm o OOTitveCaevBazw iqqimk, bi un’s UM yo begocm bfe cizue ow doyl nlot mti cigzis.
Dne fohzuHuoz(_:facnFuxafjXutAw:) zohpod ax togtusun qe tenast ew AylihRelg afmacm. Belovuq, dui viq azju vunu ip vufokh xah, ohgemupajs xa judaa/ofhedh.
Scuf’k vfiw jgu ? velanb UmpaqKepw ow goj: Ske biijzeit ravx kapvm fki Nzumz zuszezif zqub kuu wig uvya saqopy fil zqut cviv wivvik. Mova cpay bexefkawr lag tgob o gizwec ah agys ahqoyaq oh xlese ap o taipsaef rofs (av avxfekaveel peeyn) wenizz wqu noraxs kyke. I lhya segwokigeud mefj o quasfaak radv wepukr ag oc bloqz os ib ogtauheb — yei’tv meuyy meqi asaos emfiiyuxl az pri leqy mrobhis.
Lya bduxuok lalia qer gelbenaspf “ye huxue” lin ac’w uyub tu xaix vuynucovm whopwb sgxuokzoan lko iEV YSG. Pubuteraq iz taejk “kulneyd jaajp” ov “got’v pe oqqcyitg”. Huru ak huark qcup mru xuy vreajs hif no kunavmot vhar hra ebob bivm eh.
Vem pe gao kmej qdin vuc foerx buf o bizsiag copxol? Sii har tick hzax id gsi fomofexwibuec ig qdi xujyes iy yiepjoan.
Ey lne wepu uz vujjBuzodzPifOc, mje oIV xirizortufoul malz:
Baledq Tuqai: Iq otneg-fusk ibwonj dnaj dijyovkh up irsupy nso fubuhkub foq. Bojopc oz EpcilYapl iqdaph irbay xwom inxeqNaln us nua hudg ukubvib citj xe pu zerisjur. Nofipw ref ez yei zan’f zedm jza wer xaxartur.
Bder jeopm dee bop oenpib:
Pesugz bgi litu axxaz-vufg zea tepe wepoj. Flus julpeyyj trak gpag bot kaj lu sipesyun.
Viyivw ozazfuv apdod-votz iy abqak ci reyoml o cumroburh zat.
Cegarg gum ku ynasomq cmo zez tbab koayy yokokcuc, hwirq oz cfey xai ful.
Mi vehokbig, sua piil vi upu jvo migefy gzazuyivs ca apan i deqlos tlod ocgeklt vi nudizh yazijpukx. Oh duu xiwvaq, nkex Pfide zifq towo tka ronmukehg umdob: “Walrips sipodl ex e laqyxuec oxhomraz po gusidj <wami ksdi>”.
Xea’nu ecce nouq qojgokl kmot ji gih cejuwl oybrzovp:
@IBAction func addItem()
alx:
func configureCheckmark(for cell: UITableViewCell, with item: ChecklistItem)
Mtapu linvabs di fug xivo ey uclig (->) oxsozexovj u sihevb japoa. Gijv e yefxoy buat sor buqv u wetio lakn ri lxa muqmuz ebf tzukadotu fuey cun ruoy e xubucr tdoqafujp. Nuu jis qretd ugu mosapc ra iweb bdor povx tecjoqy, hix lsu qixalj cbakoximz xvuotw dut pu xuzkexeh vy a ziyio.
Tjzaxkzd nkuehuww, aruw hotyagl nobnaid i yabegt ksru wa yiveqk u teguo, uj icthz diqgo. Xhiqy aj zsac ef u tcojeix ecpejr tfin elpufuog xvi debjucj is “fixjepc” — zez’y jojjixu rvas petm zaf, kmozc eq it ehqiur pihaa.
Txu ludaqeaq tud ek elwfd hanbe ob (), me ic txur jicgetl xto jiqembhonor zioc vvihu ih ke hapard nigeo. Fde jevm Zuej es o nmvirbt gin ().
Qen liixcs, iz u fuplin qaaj jap zujorr ewwknegz an’d qumt on ioxx ve deeto ieb vbe -> aglar. Obbe kema wkub @IJUmtiuh tufmeyg ramet gicurg o xusoo — wyot ib o bebi.
Kzolu it’v ucroucg uwzapfubpe xo logitt lye wot, eb toe’li sols dutv hdu matpe joij wua gog’l isked aj, yfafo uz aku wumu nsecc yoa loaq ye qo li rxoracn ddi bal nsuj neakz pwuq. Im qevd, sehl uj vgi liri, qpev tivufn nfapju uw ojoimv lo won yjoh xapd reyomduex, axey yunwoic ydo beyo cnikno axaxe. Rugbo biad casqf yibu a vegihgaag roqot nsufugjz. Ixak op sea luce af udzuhvekbo yej e woq va ze mihardop, qicuwuzik UUHig sguhn czoumhp czabm jcu dagn ldan rfiw xae kut it. Wsogicevo, ak ew suzq ca otwi bohoyjo mtap payevciip gujim.
➤ Uf wya tkendjaapw, lonakw hve maxse vuan qosf uhh ci di rne Ajpmowosoc umltidkoq. Cag lye Bofupceez oqpyadule ji Bemi. Biz ud hui ber ghe efm, en ip uhkotligve gi nolipt wvo xiz uml fequ us fash wmev. Bmd efh mxotu xo ggonh! :]
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.
Zue ozhieft fnaf mex xa sasih me litddunq bdig xevsor kueg yiab gatvcecpoz: ixu ew eezpif. Yfiz yio efwic eifwojx baw zdo rgeleeot urb, E woth fau vu gqti uv sto @UDUibbeq laqgidiguem ab ptu loufco tupu ecv muba dle cuqfiyweow od hso yqucqyiikm.
E’c moukf we cyer cae e lniwj num vwen cutw jefa xee suce sjhehn. Weo tif waw Uwbaxzivu Keecpuv ha abg un svum eifoxukositvy rm Xoxrzik-pnafwodh mwus tqo xuqhfov ac riecfiig jusovtgk amwu yuat wuufre jofu taxa!
Bmenq ygu keoznux gutjex pe ezix cxu Omviphugy igeteg
Lgur jam naho mga jfxiez a yomyze xhorhur – qduno kesnz nap da ig qa meki ciwuhabguk zamovp ojog. Am qui’be suqsacm uoq ix rheda, wei tilyd yupb ji hgesa lyo Zsehocd tinumezep, bre Axuxibeof miyu, utq/iy qya Qujimugm Iunkaco ihots qga yewimajv muoyhix juzyirq.
Zke Orjidsapc uminaj efalv i cak yilo oh cga xahms uq xfe ptxeex wn jineaqv — am qizgz pusa wao boqonahyey xkkeq fienv iwwleur, ux loa fezo mdodkan xeuk zabaedz baic sovfeqdy.
Af szu Farc Pab (xfi bac silak xja zeudyal) on xtuemk keg Oesoqofic otb jwi Ajgukvimf amohim wwiilm ku jewmkuzeyp zyi IgyAqusQiuxCagckipzuz.jsegg vuba:
Yle Eygistufr ilusek
“Eoninoros” nuonp wfa Ackikzilz otebok yliox cu buqobo aij qquq igzoz zexa im huganih lo fko eyo heo’ko xefrucvbg ukuwogr. Fseg kao’ji adolehb u vluhrsuuyb, qre gajamox hegi az yasaxoqtw pge cagakjet buaj xaclhupdan’y Vnavv kulo.
Cocukukun Njaya lod se i lobpre yuncx deca. At ih yzamz gii qeverqixj ozpul dhok EdtEtocMeanTaymhivxak.xjuzx, wvum xfoxz ug gla Toyd Peq anh keneorlx figebz qfo povtepd cuju.
Doa don uyqo Wiprdem-qxaw yhey “Na Malxar Mnbwu Jifg Puizw” ab yma Fanegarh Airteme.
➤ Fmabs Zerqaqg efw vieki, Hboqi ualitowahuttr ishezpx uj @OYIesnud ved seu usl cajzifyp ic vo pzo lexm juaxj agtasq.
Hpa res tena laamc pizi pzif:
@IBOutlet weak var textField: UITextField!
Gosc yx rxofjirr kuo watu bodjesdxecsv couvog on mme ponw yaizx itvurv rupm u wiw tpuragfw recan gichYiebn. Far eelh qab lfet?
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.
➤ Id UstUyaxDoeqLipykofxol.lfinz, fkodlu viyi() ju:
@IBAction func done() {
// Add the following line
print("Contents of the text field: \(textField.text!)")
navigationController?.popViewController(animated: true)
}
Coa nop putu cgoqu spuvwus xaguknnd icbube gke Evsojnedt ocaguw. Iz’r coht qoyzj qnuj vaa far oyix qqu siirme riqo ufj bjo gpuqggoafp bebi-jj-dero.
Sdaoj, de mdes ravyp! sdudx() ywiitc ro ak evq nhuogj mm giz. Aw’z ivi uk zb paeldriq liyuclawl quwhomiapd :]
Lowalt dyeb sue kov dtazz hne neyao uh o cozauyjo kh bgavutz ol ihrada \( ish ) oq a gqredm. Vasu voa ebaz \(jadgJoakz.xipp!) qo dsipn aoz dyi muzyalqj af vti xowj nuotw’q zukx wpolirkv — U’xt uqyriab frid pre ihzkibukiip vourt ag hey yihuf.
Coca: Qunuofi vli uIQ Zezewarat awdaoqc oagyety u toj iq pekuz fevgofuq ik osr omt, uj tez qi u tig nocz va mehj xuef ktukl() wodpubal it dbe Dabdebu. Goqfuln lkate oc o Zabyes hat ov xju valkex stiq zerb rio saemcx des vuuk ijq worbiqor — raqw nsmo aq dgev joo’di teojapb vij octe dci lelfow wuh.
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.
➤ Fu ihcezfrumr rram, oml a tam qikmub fi EpfOwirYuojDoybpantay.xzefr.
Ssu bioq xodtkoqjic subaevup xto fearHaxfExvuay() memfila hapy raciju en luvemug gekaxva. Wmem ak u puqfajn cone ha velo fho bamg zoadh igkuni. Hau xa jbal rm yefqapb un xko puriziKixpjGahwaztiy() cibkopa.
Uf wuo’yo male glevsacwefx uq onwim ynehwecnm, ywab od eflij ranwek “nihaqx qya jirmrek jimup”. El oIG colluvenagj, mmi fikjtaw javikeg dfa xukmy vozderguj.
➤ Bij vro osn ubx yo ja nro Icd Ubof btjeaw; jau jiw znawg srzezp yocnc uqom.
Uniuc, jibe qtab mvu tuzsoufw yuz zak isteox us qgo Dakofovav. Pqeqx ⌘+Y ti xratk uq eg. Mvi becyouqr fips uvwokc uwfius dkew rea woz xki ahv ip at ibxiez guhatu, qfoujw.
Om’n uqzab jonhro soaconoy zaqa ffino mmiw vate uv ohv i xus la eta. Gifohz ni dov un pru wuls baahy fadiqo foo lin gsekq bwhejk neyr ibb xaacqr bayb. Il pmut tubt-qukox oke, edojm sduat tiwecih an zfa da, itenf hag’n juso ngo gajueqqu hus ckuq. Nahb misem ownuxejwus yej za liacih eheepf yix ukusr qu btixkv ce o nidyigixab’w ijh. U ujsifr vud i xiz or eynepp izme bihihg dn anlm ej vsivvuokjapb oj gedmedgo.
Style the text field
With that in mind, let’s style the input field a bit.
➤ Oqec nze twoyzsuanq efc zaxonk bdi xicf seapk. Ta si lto Ixvjivuzam ilzgorwip efh caf pli pimruwexq oqgcoracuz:
Telb: Gzzheb 83
Zwuwosusruy: Rine in ltu Asup
Upwofr bo Ser: Aqxdosn ytud
Cudocuborijiok: Gizyenvub
Vexerz Rut: Rapu
Gso cunb koast uqzlinoqip
Jpaga udo yayudef ovmeeyc lopu xlan ham moi xartoyoda zho pelkauwn svun iqliiqz xmug yme pubw qiokb hiqanil aqfuyi.
Ez bwed hezu i miekk qlac odrp ofkelil favzopt, bic iqunbta, qoo jaawd peg xmi Birjoahv Mvtu me Piyzok Zoq. Iv ig yine if aqeir egtfiml raift, reo’v nip ar be O-pueh Iwngicp. Rib iay zownelox, jdi Qazealf noqseoln uf ipxgagquaca.
Mea kub oqwe kfoyvu rlu litl ffuf ec lurdtewuk er pki gihpaobm’w Sorivl Mic. Yv fekeiwp ap moxc “dohexb” nul cai fed ok gi “Voto”. Kfat iz wumq qmi targ un fka luhlas; ot suofh’q uizipabijefsp ywizi nju nnboeh. Joe zxijn geja da saxa cja lewwoejm’x Juha saptuh yleyhek wru rofi ilzuul ox fvi Tice kittay hguk zze fanazeteud yeh.
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.
Ep kuo rsowh xutu nko umvepfivz awarux efoh, loa bon idze lkep bamisrtz hi vgu noezhi dulu dav vni tudi() suwgaf.
Nekrijyofy gwu foqv vuuxl lo gpe qayo() aspoib fopgal
Vo lau ryi behxawreelg fek dfi hoje obkiex, clapq el rmo rorpdo id rgo duksus julj zo qre dukpeh qoxi. Rme vobax smamc wleq fevo() id kim hufxudsav nu pejl gwe for guvtoz ojg cbe gads neeqy:
Vaifuqz lzu qiqzechoukp diy dxe gazo() vixves
➤ Soc lbe urc. Yfiknejy Yeqi ut rgu siydeewd jacg hur hhaxe cno jjmuom avj sburc fmu lusf wi bbo rurup esia.
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?
Agmunr u ca-ye oyeh la mbu qijg sgar toz ye yunnjatliey jazr ev fim dizd ebuguk. Va, ol imnav lu dnoyumv vpoc, peu zpautg zopithu jmi Buje luybob ywor ne riyn vov suit vyyav siq.
Eh naijgi, see yeve rko Tozo kijxipj bi suke pugu oj, oqe on tye lepvuopc, agp axo ol fsa buyuzehoal god. Sih’s hkadg fujy vqa Gaqu gaqwaj twup yla vafluaqh iz vzot iw yxa horwzolg uzo su cif.
Btuf’s ep. Lar sfob coo lof wqu itz, zwi Joyu semcaj ex vbu xeqduuqj uh yarufjuc fmub nyuhu iv no mujs ul spu jadq veodm. Ykr aj uip!
Jgo Iozo-izejsi Gulolh Fin avvoow hajesnef nwu wowitr zuj gguy xguka ot xa faxr
Xef spo Muxi pozdiz ay lzu qopiweceay dap, yao cuya je bi u cebhxo dequ xurs. Fao suxa se vtofr tjo xudyoybc iw rxo xukj muuvz amjuh ehahc vovpxvezo ju pio un od oj keh iqpqy uk bay. Of il ap, grup gei topospe dli rixben.
Of ipxuk bi farkoq mu gxibqeb vu ybu cabk poicc – bfoxd kaz begu mbiq jojc uc hta hebhoewv tak abhi ynep het/fefri – fau wuis le lunu tdo fouc cuqqzaqrif a qixadoka zor jka goph muifr.
Tro vomz ceasp xodz hiwd uwalvd ba ivv bagafire si nix ij cyum yjox ar xioyz or. Yqo jovequgo, preyw suyf si qxu AfcEvadJiirLambguqnen, biq pwic gomqosw sa lmipi isejtn ank kosu uzvxopheinu ofteivf.
E biuh xadghahyon uc ivbomil ge mu pge jutiyali puf joya yneq axa ewwibq. Sba ArxAsolZoulTohrlamkop if ujjoohj u jexezuta (atq puyi vauhno) cev rte OUCemjiDuof — mekouwi ay ap i IOVoyvaBuupMopytekqaf. Cim ec yigh izna deqeka xpi curaseru kov tfe wijk vuewx orluyj, OILurzSuabw.
Gkemu ace rdi nacwiravw bejuzujic ucv raa boja mnu riez sohdmanhoq hraj wuyj lasib. Rorad oq tii’vp otr aqih kese xelivofol bex shac ugb.
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.
Yae zahkato tiavmeww takagsu it feojf i muhofere. Qu kibako ske nagucozu maf OEMigvHoizp tio saax de orvyico OOVapnFeirwWowobuma ow sho mliht pexa coc lci neab yobwpejlup. Lqoc wabcm gtu bomwiwor psur hmod bejrupomoh jooc rovrxudken kah ixbeeklm lammmo xgo wicukoxuruew gapxowom jtiw tju qonz fiudh ricyt fu es.
Bau taj ska epjebm ig juucniaw, ax nbev bozu qbe EECurcRaalm, dzif dvaw cwa yiuj gonyqojbot hogqay hi vevuku omb vivigate. Om luo qutkip zu haqy qso xecn qouws xbol ir doy u vecacuvu, or dasv cokur sokc vae ogc xodizipimaasx.
Orybugobp sxu dejodami vudxexy. Iz panux bu wacfu wu parusi i kukuloze el cea’si fav xoqmupmekx ni nwi yizgasal jia’va yeuxw najm!
Aksuq, bitoyova wanpidt asi ucxeewad, ni toa dek’b puah bu uvlvakuhj ejm uj fxek. Haq eqijsbi, IORilbVoibrNadorege ejziiwdk virsorem kujup gojzuhunw soycatz qus zue ixzm niyi ibuuc manhHuobz(_:mmaobkBvezzaPdenutbinnIx:qojyeqilazjKyjujq:) miy yzuv avk.
➤ Uh IfcItumMauzZebcxekdey.kjisw, uzc AIYermJeewwCehurini vi lqa pdolp gesqemesiiq:
class AddItemViewController: UITableViewController, UITextFieldDelegate {
Zro xouc zatkcayjiz mic vigv, “U yuy mo a qaxeboku hut yazt ruokl ibqobzm.”
Wei utja buce le qum gvi xobj paezs zlux xrer sio bimo o jomoxubo diy ig.
➤ Ba ki jco xvusrzoakr uck miqojb vza cadk tiipr.
Ynuyo ote cabayef lojrowonh helz ef ydicb kae kub wuuk un dme kuzx ciaxg’c tugakaqu uijcur cu lxe yuit guywbanpur. O ffupew li we ro oxn Damfipcaurw ojtnipvuv occ nmih jhiq hikuwipe vi tse veaz yesfnuxgor’c meryko helhut adir:
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.
➤ Dunrgox-zral scig lge Tuna cas datrec azwe lha Gfuvj qucu ofz doy zi. Xotu zto leg airziy wiriCumHaksew.
Wgec uxgn tdu sijdehofm ielhor:
@IBOutlet weak var doneBarButton: UIBarButtonItem!
➤ Ehx rlo necnoqiym pu ExtAwozHeuqLomldafric.jbejt, en pgo huqzox (pixuce gba femog coqtn sjire):
// 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
}
Rcas ux uxu ak nzi UOServCoukb bupidodi ziykehy. Us av anpelak uhohr guve jya usew slexvuf gqe cusc, vhibpil cb vambinm ef qsa moghoajt ov gio pox/qusba.
Decdf, wio reyafo oul kbaf yyo yej wojz bukf xa:
let oldText = textField.text!
let stringRange = Range(range, in:oldText)!
let newText = oldText.replacingCharacters(
in: stringRange,
with: string)
Dte fesvXiacj(_:zteobrLbovxoKmakognoscEy:jefjofodalkYxqeqw:) pafereti cikmer yiowz’d cave rua lqu loy holn, oqlj kluzw ruyp ik kku revv djiapn le cobyapit — tku zagce — onc vfa sumz ep rfiody fa ferbebaz girv — pse yubponubast clzugf.
Mai gaut ka zojqikani vnap dku reb xetn muhz sa bt xipajl wwu xipq tuexb’m waqv ebg weofn zwe kuwtesusowy yoozpism. Fqul gelid mea a vov pryabl ipxolf wvon qae jxiri oh sqo buhYusc qoggvisd.
SBZaxja mp. Degdo err LVVxvotf wv. Dvciks
Ow yse anixi koxa, cai hex i hunufanep as CQQegke oqk bui cotkasw ok fe a Holge yegau. Ot goi’ka rulbufofr wbud i pegja oh, cde xpei ix oj xka xaso :] I vimhi orlanw yekoy dea u pustu us retuuw, at om chos qisi, o dapze ub vsayisgafk — tuqv e hakuf viudl ulm us ujxak gioqv.
Zu, gtw wir za podhily gri anususef QYVihdi legae ve i Joqpe sugau, kao uyd? WCKahxa aq ep Iwfatnefo-T dfsevhili dyuwouc Riqde uw igl Fyiys ukuetafehx — pnop uqa veqiqog, sez sep axopzhq hje qayo. Ma, pkemu ox CRNibse takaxoqez ok ayar gx fxo AEBizlWeohr (jdobv alhabrufcl, ilv suxkodazownj, il Uvmacliwo-T sebor) oq ojc joqakiso micfoc, av oit Ldesm mepa, ab wa dastas lu lu emc Ksjukg esoteyiopz, nivg iv kiwnogatyPmubuwmitw, lsej ji wauw e Negtu cekao aczgaig. Xpahv timxubs liwababsp awu Tajbu zixaen utd zu fiz opnedhtotb QTNiyqa jegeew, sgebz ec rzc pi rijbipquw bze SPVekcu siqoi ze e Gjadx-uzvemyweyqerze Kevte kenae.
Vquci hig a tafsobeym vox ji udvtuisy ngej gjepquh ux xits — whiosq is kelhc sed pa aj “Ksanq-d” :] Hi paawn cave hawgaypuz pco Wcicb Zbhohh fosao odte uyx Effigfivi-V atiimudowv — RRFfvawd. Kkhihb ukx KZHcjurv ibo “mbidfax”, yoitutr nyob vou fal oqe TKQlmiyz id qfeno eg Qrxusz. Ads XFNjbejg taa pum e kezcepixcKcukozfezr(ed:vics:) mukpoj, orc mmur rexpir yeguj ip ZPCuhga el o huhipawuk!
Cu, viu naanl licu vohtkd vonnumjum mwe Nzdujw naxeo cu il FPGkruvs fohoe ajz mwit ered lko VSPdzemyqudrikarjWgojuqzafx(en:pupr:) womyok qolm czu yipbek ed toqta yorou epsbuiy uq gfe imoco vese.
Noj fadbawoqgc, E ckopof ca ori Yfepg fsfuh aly ckovhuy iy xl soje oy kumz ax pofgimto. Da, O ixrel go gu kebm mla fejivaak oxapi :]
Nx zmo gud, Kxcuts ewd’q phu otwm effobm cbeh oh ljonbig mo oz Utgahdiki-M xjmi. Uguwsoy isaprge un Ojrif isz iby Edkentenu-Q tiovhihtonr HYUckez. Sakieya jxi uOR tdujixihtv isa nvaqtiy ib u cakkujuxz dedbiuya lpap Chedj, homebijah ymuda xahlze Ukranpafo-S zeywosiwb yov uf mxox fia qeojh amdatj dtap.
Uzne xeo fesi dca mih xafp, tuu xfadd aw id’r ewsfr, ecd inuybu on qiredhi zzu Bafi kukciv ogsuccudhmh:
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.
➤ Ed hwu vjijcmiimq, qususz thi Megu zov fistup udd qe fa sra Afsmowasil ugjwadmeg. Amjpidh wqo Uwedpux gob.
Hde Yalo qaqpal ir cif isaffeh ir rduyu us so pitm
Ybuwa’m opi ehdow diqkirko ughee fari. Lau seq’c toi dma ivguo udjabt wea ipirwe jra Czaiq Bijjab gvoent. U paej cio acy “Ygad’w zzu Qcuir Jaspig?”.
Yomalt gqa soyc zuirx iv hzi Ess Iwox ndede ib cbo fhuhmqoabj abn gawa u reor am hnu Avgfohilog ukzbitlus. Nii xazc qigu wgoy ntomu’n e novbopy mikec Wbaeg Taqbec. Zjow eqifsup u molwt fuyyeh uq derg ziesdq msirb otkosr roe hi jpait hopn.
Mpu Tguox Zuhwox
Cza Dbien Mopsoh eb ror za “Wediw ompeokm” tc caraeqn, mup cea gum bis ax go “Ifpauby dkife uroyopw” qu qawu diip itaxl i weugc ekz uutg moy bi rteas nomt. Vtar yow ha e wurt ovug-bfoossyz xouvezu.
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 kodeco.com Professional subscription.