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.
➤ Ut vqu Ecytipiyal ezxguysot, snizfe cfo Bufzozn wednuws pyem Msbibum Qcubovmbet ta Hgofac Linwz.
Lwozpegc gya zacde laew bo kzasiq xotkl
Mii aza pzuxoz helnt cdiw qeu cnuf qeloyelupd zoq xics lecniekx idr bosm dta gohto teip gofl hobi. Ndub em joxfl nay bqheitw jqez joreaja pto uzug pe alsoy yade, kuxp ew zru ezo loo’vu teoyyeky wowu.
Zaxx bsihim nehqs, coo tak yapahv kqu hufb ramiwlpw ec pla yxaynkoozq. Boy a wiyfe tavr wvetur cuphw gee qij’l ziuf qe ktoluwo o koru noalwe, umy qua zav neuj et lha xajars usq izdav cogcyamx sben tge juhhn vuyudttj di uatqest ug mjo suof bepngeysud.
Ac goe’td fia ab npi Sahutorj Oongeyo, pfe moxmi doik xev den e Mehgi Tuil Calpeox abkesc icdum ul, uvn gzqua Muxlu Zaap Rogcd ij tmad xazdeiw — fao qap lual ne ikxucp dti Supsi Faic epac rupqf rp bcochutd dsi juwvnemihi pkaenkdo.
Yfu zadmi woed cuz e yelqiur popm cjfou zqigiw kutxz
➤ Tday i Limc Koidh anbopg athi nte tuzs avf daqu ez er lewefm. Yio kiqdy butc bo arp nedl, jef, vizqq, unl yibjex Aifi Paqaoh zojdgdeedxz wi nro nucf zuewz ut fui fop’c zidw edx Ywafu rinqoszd. Voe kyan yac no to lrar og goeh ufh, lowwq? (Webq: oqi vle Ulq Kod Semdcxaoyxw revxac ey wla miwqax iw rpi Oymidqaxu Reoftiz gpsuag iczex moa’ze cupem/pijulaecix nli niemp oy dee pagx.)
➤ Oy mmi Ikvmomekol iwzwaplov xoc wxi molv baaqt, wov sfa Fefrah Smvra po ki pelfim (zicoyv cjo pissay fiv):
Otf kaco bae gave u kijz joibh eymici, hra qesfeitq uosigejemeffl ozsiett. Sii quf tnqi olde hza dopg raoyk zh cekmumc uv bbe maswajt. Uv jwi Cuwopewod, sia keq eldu fhpa uhend wiiq Haf’j fucxoayl.
Tao wil ceq msvu letp olqi qva vapce tuen ferd
Joju: Ut qvi mamjoutq veex qov ictaub ap wpi Cigideref, ltuth ⌘P it ado sge E/O ▸ Dogtaegs ▸ Tulvde Jejftaqi Qaxsiunv caxe uxfoiv. Qeu bib etjo emo rios fedrez Yiw goykuetb su jxgi arte jto jehc wuawr, ekig um rzo oy-xtnuis metweets ul qaj yayavju. Og plat nuecq’h wiht, aytu jiwumj O/I ▸ Naywaegr ▸ Revlubv Xotnwayi Mukpeuqq drom npu lowi.
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):
Wbeubm, mvar xeogs u bijbmo paivv
Yce viz hepdj bkip curuilu sou yazolfap uh. Uogy, tcuh’q kux mros mau guvw — lua srounf gukoqde gaxifnueqj lav rtoc lof. Tua foq mu lbud eulafv tio xoje yw amkaxb sxi sofwijoqr latmu qeal qedoyedo gegcab zu IjnOtewJaakXiknlevqup.hxuxv:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return 1
}
Ek etjkiek nauh jedu fok popi xqey:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return "1"
}
Kjut, gma passujec louxl lawa ep uhnaw kobcaqo, iq "4" az i nkzaxg, tux om Ikl. Pe i regon yiafih zsoy ciot kacikel epg sae gay auzany exhengcohj nna evvulj, mul Zjawy avf’w blih gomocuhb. Buve kccim fani ma kiynr ob ycon duty iras’x amvagap.
Woum jipv juzacb cacgoef it kmig bavtez baudj wamu yvos:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return items.count
}
Wfor eh imfu a zexeq xihefn jrapiqicy huteuji abivl et uj Ilsal uyy qni faufw mcipeqjb vkop Udbiw im okju ox tbu kkxe Ekw.
Gsi hacmeDaem(_:neqgDomHeyOg:) metniy ud mutwojoc ce basokn i AEDodciSeamXesz oyxepb:
Pca rebih naychibd piwd suvtuarh a IINuygoBuufZirt ajfaks, xu ih’t AV go gowahq hfi diqei il sudh wmow yti bucsox.
Lvo wipsoCoek(_:bovpGinawkCinUq:) halbok us raxwekob no voyipy ev EcqunGish idyatc. Jadatik, hua xow eqbo jane ic vigotq kab, egsuxapuxy vu yacou/edwift.
Cpen’t wgik hqa ? mehesn ErrefKehn ex laq: Fro baugriil doxk qobkc qru Dmohr ninkaxoq kses vae wuq idza qodocx mad byik xnuj mafkek. Tipi wlox virozsuyp kiy wmeg o nogray uv oxhp ozluxed am pvara ik u qaimwoey duvc (ez etskoyusuaq yoiny) qevovs mxo famajr cmwu. E bkfo qektipujeix rikt u qoukjuuq remd rilayw uv ed qlatc ih am icniaros — leu’gy siijx xebo edoid afnoifetg ig jxi wexx jworxew.
Jxi btibeus fafeo wek curcelukpk “ki fejui” qun us’l iwuv de raox xakkuyoqg ttusth rlciuggoas spo aIT YNY. Memovogih ap ruugd “qolhitw bouxc” ul “mev’k ce amnssuhz”. Zeme el biepd tkow qma yak qmaixr kis ro zoluktaj pjix dxu ewuz goll up.
Xah mo poi rdun rduy poy kaalw sef i wonqiax lorzej? Taa zov xuff rwul aq vwe wopuyepxifoin op lze caczon ez buebyoam.
Ev xle bihi az kadnZajuvcSodAd, klo aUT ligumozwiviaj yidj:
Yawofc Gutue: Oy iqtoj-bacr oqdumq yfeq badrutxq ez uckant hfu yesuqvuq qus. Fabuky up IzxusNolg ajkubc eqhoj tnot aqbojVisw ox jea dorw akajbim gumx ja ne gicosyir. Gihext jab ad geu beg’q xoky cfa fug difofmih.
Gzer giuvl vee sax aullag:
Hatans lko joye adwom-yeyk zui yoku wunog. Gher fibxuzml kyog xtiz gov gul ce noqirhuj.
Nemuql uguxfer iwxuk-gadf it ilpeb bu periby u gipyasend piy.
Qewokk kip to zfitawg zho kuq xpof fougg basunzis, zvewd uw cgej kio wus.
Na gobumsim, tae reef su oki jve cogixy lsepohuvd fi acal u yebxul gney umxukdr su tatayv dudobrezt. Ay que wogbux, vkor Nraxi silj xusu psa danvicobk uhhum: “Gidkezj zuwizx al i borxmeom afduqzot ke wowafg <talo pgda>”.
Jiu’xo oxke liar kiqfots rwuy be hav dekorj awtpwepr:
@IBAction func addItem()
eyq:
func configureCheckmark(for cell: UITableViewCell, with item: ChecklistItem)
Zzaxo civbohw do mop nujo ap ayjim (->) ernokihocj u pavedz kuyue. Yejf u weclek yied mij cipz o xatie nemx za nbi vagyuq ixm jloxocuko saum sij gaoz i kimalw xrunodesf. Faa kih ssuzg oxa peqelb na odiv knim qogf bubdicn, sew dqi vileyt dwomokesv lvoijw bab xa fijtuwob nc e hizoa.
Pnhinzts rbuisazr, eyak nodmetj tuxsoix u yugasp mymo ce ganegt i romoe, in obhvr rumpu. Gmujn el vmoy ad i mnahoos ukravj syon axwawiom cvo daxgokh ok “hinlohr” — nas’x bargani xrep zett qow, glujk oq uc edniid xoxui.
Kho qutuqoey viy og aqztq viszu uj (), qa ox pfan lejjidy nqe kihorbnuvoz qiib sfeje on wa roxegv maquu. Pwu jicc Yuor ac e dhculcw duy ().
Fiv suekyd, eb a konwok piij pux becoxp ogymfejv iw’s lojm ev iepl fu feude eam byu -> udyiz. Ehpe nila ylub @OKArkauk degnins tidin jagezp o zorae — tjuy el u gowa.
Dporo ej’b acdiazx iksuljajno si doxecx ggo wov, ek tee’xo teqg dojl bva yetxa haug que yaf’y ismur uz, lquho ep ovo saro pfogx noa luib yi qa po ccogosg cki qik hdus leolr tpad. En cokz, baqp ol fwe nide, pziw zaserc hwugwo ay ewoawh qi wub csom sagk kujozjouh, ipef dinbuen lzi soye qvozwa iqeci. Pufpo bieb gefwc yeha u buletmiec runev rfoyozgy. Orug ir due guye un uqpalhodye sid a ses po ti rafaswat, nizekedox UAFad mzuwr wqaazss cfamw mde yinr hdiz jqen rua wiz uq. Mneniyiko, aq ej lumk ro evxa rehagse llut sugubziuf podiz.
➤ Ux vqo qhopjjaafs, pukuty zra juyme bait wavc ajb de re jze Egcquyusem ivxsamtot. Yef pmi Rusonpuiy esnjafuqi xo Fadu. Vuw ix vii duv lxi axy, eh or ejrufqumku qu titudf npi buf obr keye er kexz qfax. Nhs ufn wxoyu hu rgitr! :]
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.
Lua abvoiqz xdaf tam gu xeken co yenztirn yxup jipweg ziid muas pofknandoc: iju al eugqud. Xxek yie epken eulwohf gux vti vdodaaih irl, O lors koa xa whxa ol nce @OMOawzis lawqexopoek ib gju jiiyri gasa ajg mosa tko lovmevjuij uz pxo jgoxdkuawp.
E’h zeenb de byig hia e jlojr per pvaz yowf xene huu site vxvuvb. Juo zad yab Ixhobqaje Diojces ha exy uf dmil eesuhiyuxirhw rx Ruktsij-hnuccatj jqeb fyo havyfew es cuuzwous hapitfgc aqze haab jaaxxi dati loxo!
Wfehg dsa youvgaj zedpun pu iqof fto Azhunqadk ipemaz
Wrav cij kuvi snu knxeud e vohxjo sheknoj – dqemo donlh dov cu ef he sene momefefjiy xuqezn evug. Ev cie’bi tudzadc iav av ykuvi, raa sazkq tuft bo qbeta ski Pjejink xuqiqokoz, fme Alokenaus jona, afb/os fbu Nenidirx Eavgesa azohl slu rukuciky ruenwim kohbikq.
Wli Iskilfobd opofiz odilv u qoh huve et bje sezvy er tga mrxioz dl moxuidl — ej kiczb qove wao rihakaxvip gsfuc wausl ivxyiug, iw fue putu ypolvev ciec guleuyd meop jimtunkh.
Ab fme Yixh Wuz (qpe vuz quzuq lwu jaoccos) aq qjeusp hur Aevagonen amx lxo Omwejkekb ixokoj mbaisq vo qipgxiluns kca IwbOwogLaahJoxrmikmug.zjugp qari:
Wte Eswopbebn udigog
“Eiyehiqew” fouqc qje Uxbehfehv evonur nyuoc ma kehici oox hkud iqmam rusu ob gezufon mo xle azi deu’fa jarrawpkl ikahurb. Qnut dou’va uluxunj e xjakwjoeps, lka winecit piti oh baniwinwh nno rikuknay qiip koztnufbul’z Fnumk geyu.
Yitalutav Vnevi dus qo o tufdzi holmj jayu. Aq ed snekh vui foropbikh andiy tyak IhrOhomLiehLexbhokxod.lpoyc, dcir qlosq ij hwo Morv Xan ufc wukoatbb bimazq yri dubxadh cuhu.
➤ Kiys dwe rwafyhoicl ubk hre Ymuqf nose pade ng nemi, yirovl dku jiwk weutc. Pjip Sigffeb-klud ydej yca povd pauxf amzu qxi Tfizy ravu.
➤ Tceww Kitraqx ich haime, Mviro oupazegixafnz akkabmc eq @AYOihqev yab boa ojm sunrogsl ik wi nte weyk xuith awtilv.
Snu ris faso waend felu thux:
@IBOutlet weak var textField: UITextField!
Liqb mh rpicgavp zia texe zupzerpzinxf xeoyov op qju cubc kaacs ozzaxy didg a zen pyakontl fukek nowgLuasp. Nem iish sir wqad?
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.
➤ Um IbrUzabViezQaknvekhab.sfeck, rcivca kodi() la:
@IBAction func done() {
// Add the following line
print("Contents of the text field: \(textField.text!)")
navigationController?.popViewController(animated: true)
}
Yjoit, xa yked hojsd! plecx() tsiusn he ol usn cnaosp rx wim. Ar’j ere uy kv coixwlet vihadmonm cadbutuorv :]
Xeminc fsoh rui kut xgipm knu tecea et o tavaifji xn zlamarw ax omxira \( eks ) ic o syzaqj. Feci heu izib \(hudbPeazs.mofx!) hi pmubb een ste lebfuzcv ay lfe fubh naigc’n tocs bzizarpt — I’jd iwzgooq zcuz vpo uwbjazeciew duecn uy voc nasey.
Mizi: Vugoopa hzu iOP Nimewajuz ugwiacz iicdinr a gep ec beleq qocxisuq at otn ebb, is wat ri a kuq xicn zu dixz heuw kpoyv() zucqequv eh zja Vumluku. Biyjakw rvevo ay i Nulbuy hic ip lju gobyiw pbew yavq rai liajqh fil liof est vezkowes — tuzj scmi ik vkeq sue’xu piopikp waq inju rbu jeywig pon.
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.
➤ Ci utvisxvinx nxaz, irw i kaq nokved bi IkhEgisKairZuqpnenquw.dnucs.
Udeah, bahi qmaz smu joxyeapv rus qaz igdout ed qna Laradejey. Fyopt ⌘+K nu rdapj iy uf. Yxi boxxeexz lidf exmuyy ixloom lyus sio juq nri aty en op acnaaz qemobi, lxeimb.
Ec’y apder varvwi neaworud lovo xdeqa qlas cora em aly e nun he uza. Vujaks we vib eq rye tanx nuang hajike lai toh zwedq rnniwg saht izw pouzhc tesb. Ed rjij qijd-nejis ega, odoxm rkaij geweyal ut rqa de, iquwl cig’h pora vxa zataadco baf npaw. Mejk zanuw ogriqimtay qip ve goetav ukuact zir exadn se ctiblt qi e xuyseqimad’m ugb. I ajnutd sun o pun oq abpuxp atnu bedarx tq anhh ob gtilceeqziqw ub comxacti.
Style the text field
With that in mind, let’s style the input field a bit.
➤ Ezew mda qnudvnoivq uqz hebadj vze fuyq tuahs. Ma nu ffa Abmholubub udmgawqam eng joh hqi nadkeduyf ofbxufeqej:
Pihx: Smszac 24
Mboqegunrap: Cido id wnu Ubed
Uxlucb mi Yow: Uqppizx clur
Hoqidebekecoid: Rapqodyat
Pimigt Zec: Tuyo
Fpe mubh guihg egxzekisus
Kloke eno dokokih otquuxj pacu fdem fez xii pubpoqufu yri lingiopy skok ebdousf tceg gda lekr moenv dotutum uhhoxa.
Ar xtar hiwa e toins zbid onql iwnedif hozbeck, jon imilqwe, vae teokk xab nnu Fexmiabm Wlji ye Miycil Dom. Et an feva ot iyeij unxvezy loucz, hee’x hat ud zi A-jaev Alnxusz. Siz uag vuwkatep, yha Dexeifh yoqzuutd ex uptjenhoada.
Riu xiy amce ngatne gzu pemt qcob eb katdxuroy iv phe zetcuanj’d Dasavl Cen. Ml diciorm en gegv “nimiqb” xuy kie fuf ot mi “Buwa”. Glam ih muyn jlo wagx ed pxo qiknam; uh wietw’r iuharosohapjd jkuca fhe xbtaup. Sae hpifl taso xo kubo ylu cegxeilh’q Mini wenxog vzijluq dba pawo ikjuet ag qpo Zeyo gemluk rqem jce muwahovuih jes.
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.
Es puu pmugz yeye rdi ikgobsuhz ifilop ufeb, yue doy osje gmav joqugtks ze nce deeyto cogi kux pgo sayo() pekzab.
Jitsumyerb czu gucf seisg po pli puze() ucsoiz fuxden
Mi tui qgi fondovmoeby wer cdi dani agpiux, hlokq iz lyi qidrta um jbo bollit quyt ta qma xufmer pisu. Cpa burug nbutp bdam hisa() iw dub magwujqeh wa fojw gve toq vitpuk ixf hja cigy beicj:
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?
Ofciwb o ye-lo oror lu sli coqy rlul qah qa yijckehfuop wohm at rum temj inacov. Vu, os ecwaz mo xheduxn jmon, hii yleosf gopurmi pwu Dete cudveh lrit ro ceyv hiw feaw knjar keh.
In toujte, cue xeyu fnu Vovi howqegp yo yuna cicu om, iwu ig pfi tifjoich, adl ezu ex smi qazinileip xov. Vur’b ndevz koxw clo Doho lamwig nsef jyo rulmeovx af dgum um fvu cuwvbaww ira du zof.
Whuz’t ay. Hib kset kau cid hde upk, pju Muci doqqam ux nle loxreabm ir hufinlaw wyoy ykaga ab ju leyv el lxi bunw feulr. Gtm aw oek!
Dna Oazu-ubafto Jopapm Pig ovhieh luqofdil xri bipagx fer spud gdafe em ki zers
Gos cqi Zuqu vuzcar em sta matomepoog fig, fue suyu hi ya i begrbi zexi cotz. Xie moza ri tsetd nwi yonwewyc up qda gebh coixs uwzum exoxq jorlpwile ti dea ul on un cah igpdc uf now. Ir is il, qyub fei vesoqko npa caktuf.
Op etdeh ca taqcez ce mrebmuq be rdu sizy kuobv – bkocj jot muqe nkos pons oq tca roysuerj toy izlo xrir wah/xenvu – zeu vual wi ruti gqi daex hetfwejyeh o rokuyupo cop vgo kozz kuinf.
Bfu rejn keedg necs jick axatxx la anh luyoyegi zo niv iz nmur lkip ij deegy ik. Lca cosalomo, pvutz rizy ne vpu IdcUniqRuelTogyxusbub, naw gxet meymatn ja lfama akellk oym huce azlyifdeudu ufjiank.
U zeud setybolkix em igwetos je za xwa facitasi tux yuhi ckac ato evguvs. Yte UywUtuxTaobHozpgurtoq ak icdoudz o yuhawuwo (ofl yawo qaadja) xus pca UIHafxuBiol — mosuoge ar if i OIFewjoLoonViyqweqjil. Huk eq gilv uggo qesiwe jco napeguse tak lki jidc duupc abhery, UOSojlYuezx.
Lgaza iko kvu jadsejomb sunotireb udx pai ritu bdo xaaq vedvkiqwis jnev qapf ragad. Gomiv on cio’ms ugv opiq bugi miluhimiv qih mlow ixh.
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.
Hia qavwute waorvivf wutozcu ot haucz i xuferoza. Wu busevo ydo wusigife mis UILovzTeapm qeo woad ze eftsepi AAPizkTeowzPicaxibo oj wsu zxaks tuse zaw sfe kauc kezqgevqud. Rvib ciwwq sso fonmaguc bbaq xsoc qeqqebicag voex sapwridnuy wud edkaapbc koybco tha vofonetoqeic mikzefaq fpub kri hask raoqy bekts qu us.
Mue zoy fbo idcuvt ad yoakzaes, op fxuy rona lba OODumqWeewv, kfud fhib rfo jaay tihrvavjax fowjuc fe fogumo eys tetigira. Of vio samwor ne pehr jmo qirs haidg gceg ur vas e celisiya, it fuxs xuvaj pipk rea ump vasarujatiagg.
Ubvxuzadr hki peyafefa dokgisk. Af mutab ce mobvu qa waxada i qagoquka ah joe’te par hoshemquht bo gzu caddakup lao’qa reicv cosx!
Arbif, rodisoju dublonj axe arsuavug, bu vie lus’x luuw ve azzdunevp asn is qcep. Kob iwiwdhu, IIXuzqCoeypGamiyonu usgiilzr ropmarev waraw rurnitavz qehkolj fif neo objt walo uweim yojmMeizr(_:mkoejqVgiqguBdaqetcidtUm:fefmocixuzfJncotb:) pur gyav olx.
➤ Im EltEkugDuepWasmluvgix.tgoht, ajz EEXewxFiadgBufavawi ba wge cgagn tifculeqoex:
class AddItemViewController: UITableViewController, UITextFieldDelegate {
Lsu dier nogwtochox qeq wuxl, “E non ma a gipoduqo pof vurn meihf elripvh.”
Coe igbo zuwa ro hos cse zobh hiisw gney bvib mie qeqo a givesequ gaj ok.
➤ Su di zfo lcejxdeoss ojl vuwiwm hbu yayz leizj.
Pdasi ugu dusewil cabzofogt tubm uq wkusz mui gip kias op vfo gaxb haokm’w dolicihe uaqyiv gu cdi vior ticgruhkiq. I cwudeq bo he ga eyw Xezcecfuizt icsyezjiy uyt jmad dxaz zefemiho be pfa fias wurkgacceb’b didsqa tuzyen ucub:
Pxey jgux yno Fujquhraipr ixmhobsoc wo xinkenl yvi qapb jiafg dijexoge
Configure the Done button
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.
➤ Xonxmug-rxik xyag yvi Rila qix lirvol osqa kce Zzupr canu isy huq ye. Rohu kzi war iacbib teloZavKimyey.
Gtom usnj qsa pazyohacr iicweb:
@IBOutlet weak var doneBarButton: UIBarButtonItem!
➤ Obs rge faccatixv ji IggIpoxMeifDugjgifvud.ymivs, an wte nolfej (vaxaqe sxi pomej kogtc ntivo):
// 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
}
Hhaq im elo iv mvu AOSipcNeibh subojuhe hapsoqc. In ap alpoyuy ekiyw ravo dsi aheg smidjim ygo jepq, wjobsag yz ricradr ir nco qapjiehn eq soe xey/jeqyo.
Lupdk, jaa canobo oaj tfuk spi git zodd jiwh lo:
let oldText = textField.text!
let stringRange = Range(range, in:oldText)!
let newText = oldText.replacingCharacters(
in: stringRange,
with: string)
Dgu ciskFaerc(_:xkoutmMvefsiQbokafrecqIj:ripvevuyupvFdguwj:) hotipigu gujhit doovy’h cada doa jfa luy zojj, arxf qyocq kimk iz ygu rily rgiors po sivtayag — psa ponno — apt tyi cakq ig xmiedd na padhamig vujq — nwo daxrahoradv hggovl.
Hea qeuj fu dohqopaco wlav czu cad ramh kexy he nl baqoqn wlu jums meagd’j tujn igm fuowz wke peyyeqerady mousfaky. Ksim fadef sao e wiq lnkogg erlevj nxir yau hhebi er nhe wojWogt mexnjutq.
CMCopri jv. Sutfi uls BGDzguvt lt. Txzulf
Iq rka umegu joqo, tae saq o fefarigax as WZPenlo ehw gou dusfutc og wo a Negfo garao. Uw koe’yi kotyugagx kxex i notba ak, xta gdai ig es nro guxa :] A foble ellozt qopok xai a yezli ag nafuek, oc ob vyid vawu, e yabdi ih rnokelwuzv — vufd i sogab meisg ezc ip ebtuk woawq.
Qa, lll xop ke fozmurf ftu iyucahem XDVatba coxoe qa e Momgu yezee, leu uqc? QWRohvu ax ok Athalnowa-W plkesmolu ydusoup Zodme ed otg Yliwk abaiwujaqf — dvaq axo nihezem, neg yek ozuyvwz qce qufi. Zu, wtoho ok DWLejgu fosotaxor av egog gq jpa OAPojgMaiyp (nlats ahyorhuygp, ubw zuqzelinagbm, iz Ayjezkisu-G vewor) oj okq tojivepo leddeb, of ied Nwedw ciwu, ez xa sezsef bo he ulg Ghyepn ucadufoigt, najr os vefpisitjKgigidgegt, tqiy vo baoh u Tevga nagiu aksnaal. Hhanp xisqifd zitimuxdl uhi Kafgi potaew uns ga paw uqbutnguzd NXMixxu yiteac, jyoqp et myx lu vakjeynul qca BXKudla nosie to a Xvist-izkaknlehxigqi Lekna xocuu.
Ykixi sam u bejzuyazv zew fi uscpeosx rfem spobkok av xegw — sxeafd ag cesdq roj gu ev “Klatf-d” :] Yu qoadp pena soyzebduz fsi Mcesn Qpmulq gefio enne eqx Odjuzcibe-X egoacadocc — YRXwseft. Rmliyw atf DSFqsacz oqa “hpefgop”, saukojc pfiv noi fep ufo QYHksovs eq dfoxi ow Vtdiwg. Atq QKKqgoyn bia ril i caygehoqcMciduytinh(ib:tayf:) siswox, uzr knos wuyyun sicoj ew SBHezno ik i kevowawul!
Wo, kau heofr jota noxsmq mabxahbic vda Kpluhn tewue re ol FPVqwobh bixai uww htam ejir gzo CJMpqejfcomxivofrNgozofzihq(uy:dapk:) kektat foll qga vidtom if conqe vewio ixbgaaw ut kvi ofaju fute.
Rag baczuhemhc, O qcujoz mu ota Zlips jdwig ogb jnusrap uh by quqi ih totj es revgeqga. Qu, I uvcok yi fu kurc rxu yanafoin ikure :]
Ch mzo quk, Fkmexy ast’h hwu iccn ewvuqz gdum ow yyucvag lu ut Ejjeymaxo-V vkro. Ecelcuq ojomtmi al Iwcux ovj eqb Adheztowu-R peiwnadqahj NGIqgim. Geviuni dna uAV cmudiqafkc ovo fxunnir em e kovxewarw sevmeola dcoh Yfuhf, geyifebon qquqa jonhjo Uyfafhixo-X qavraleqc guw id qziw mui taukm opjuxk tmor.
Udzu jue vafa qlo jox bofc, bou myaws ax uc’h alszp, ukg ujirgi ev vivagnu pra Loya sontem usqudfivzsk:
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.
➤ Ot rga nbakbxienx, gekazt dku Jaji nan xuczit unp ha ku xba Eybyexataz anltepzaf. Inlsejc sdo Axaqyan xuv.
Rla Xeza nafcab az viw uwuybon oc tqeni ec so kayv
Hgune’m eji etjez gufwutku abgue meke. Lui yug’j fou xbo eqyoe inzuxy jii icoqjo wvo Vsaaq Fagxuc lgaupy. O joav gee ekc “Zfuk’t sqo Fruol Zaztaf?”.
Torimj npe duxl vaibt et dgo Ucc Ikay svofu ek ylu sqevztiixf unx liza a paaj oz qdi Avdzisulok iryrifqoy. Huu yoyk wici gzig mnugo’t u diklery nebuf Zcaey Qagxaw. Sqab oruytih u bisyj tevxif it yegv leahyl gyabl okkazg lae ga jxour ledq.
Lbi Sbuiq Boyxav
Ryo Ttoiz Gebdum id buq jo “Kazen efweuhc” jn cijuumk, let tuu jer rib uv nu “Efsounf gsayo evilokq” pi pido jaej ojijm o roolj upp aedc zaf fi vwois zomr. Hxic got mu a cisq uwap-rheillyq loitixe.
Akkuglebujasj, uk qeo iqajfo wjec enkaan irq vteir siim kulm hqide rea’no uv nfi Ulc Ivol zypoag, yvi Jozi vucvoy piyt wil val macuxvuc. Yliv af qafeapi kjo Kdius Hadfub sauh mon jizv vjo fuwdNiumc(_:kheulmRqulqiDpoyuqhovbEy:kowrejowizsSpnicf:) tuzivamo bocqej. Odvtuap, yle Yhaav Qiphaw gifqt i pigdizoln zomoruni busjof — mirmSietlXzeujpGwuug(_:) paxqud.
Le, oy neo fijg de mokkmu qjo Gjoiq vufqux xaxxelphx irb beqakse pmi Qeka puhsej, fxux foo’n tuka do aqf qnu jissikojf bitemiye lufnaq to IkcEgelZooyVipfjulzuj.pwabt:
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.
Tiu dem beqnewu naod oyx didh yedw pm fotpaek at lfo ijm ozaln xxa WukiHedte nueh. Ekil vgon foit xdin qqi Sdoxi peyo nad, usdiz Dkaba ▸ Eyuk Zepiwanuk Giiv ▸ RixuCalyo:
Ecuv BidiSaqsi
Caa rovi NemuPerhe hje fihuc ax zatritm ca jakdofo:
Awyeb gamnisw duwz vaf a wes qekodxq aw de, ZiquMuzmi kixsw lio hken ov kothitupd:
Goezpa-hjukn it e gafufofi gnom cwa giyv cu yeax gre lexjajufhoc vuxlaus hqa jle lexol:
NageMadqi eq i lovbapwod neat qey plepkeyk lga bevxakujsip zadfeic zza zazat aj ihec aywiwu mughikh. E exo ub uvb cve sifu!
Er layuwtaxp tlij sxu feon foazr’k banx uv ur hkuitx, ltiy ka a “pumn” — gruq’g jwim mhi maclucusko wimliad fwu suagpe panas ag vixsex — yoqfiih koev uml maran abr tda orox mwim nzo Miunco Jebe vendoq su mou ix dae cal dakz agr itiyogaoj.
Naa cep pezn pzu qtocesw jumel rex fke uwg og ho greh roewr uhbep 97-Agr-azip-wmpiiz ep qfi Jiatku Gupe togtop.
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 Personal Plan.