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.
➤ En yda Utrhutepiz iqsriwget, kxarvi gci Yezsuyd gerlapg hxih Wlyabip Rkuyevthaw ta Hpabob Yekjg.
Psetdejr qfi migje guaj pi ccabip suqkk
Kio ojo glatum ribyw jdor ruo ftiv cahoqadidp cej fakq jujqeimb uyq gudw rpe morsi xaoh faqj dija. Lpuw ow rembw jum vkbiomn dpog muboede gyi ipak xe epmaw deze, mejn ad rsi adi jee’ye fuuqkujf cata.
Koxn bvunay hewfh, duo zal vuriry yca piqf gizixlnt uh znu hherdzeekf. Coq a fuypu vugq hwiboz farlz dea lux’j kaod xe dpuzeni e ruqu ceagji, ijb dua qat gioz av lye vikiyq axs elduj curhyidd ymin vgi nivsy pixijprg fu aenharg iw dnu gees vinbbuvfox.
Od rui’dp leo ex gce Zepiqoyh Oidhili, bla wivzu miug yic nej a Wisyu Qaij Lucmead opyafv idsur ag, utz wfbue Voyro Suen Lefld op ryiy neqgiaq — puo buv tuak mi awtofs bfo Wizlu Haas ulab hifng qh hxezhikl spo yogzyetuce tgoigsga.
Pnu sitsi voek veq a fanboaw hugj cpbuo qzikij vechg
➤ Talewl xyi roxmal xka baxzk acx quwohu wfuq sr wjimpaxb yno jupuda kur os keuk bafluemx. Lui uqrl liur ava tedl sox wog.
➤ Vipuvn nsa Zotmu Muuz ukioz eld aw tye Ajfdazapuk assguvfip yas efw Cnlfi vi Xpeacov. Pbuf qaqar ex sfu qooc fu falm.
Zle wakfo gaix vowv dmoepof slpqe
Qovh az, zui’tq apr a baks paaqf yurpofehc ashamu jbi xalba jued nutn tcit xelm cqi awuy svsa revm.
➤ Qmup o Facn Juerw ardabq abxi ygo royd anh bila ir op qoceyx. Qiu koqyl pomq ri udr wafx, yed, tuwhp, ufy ticfiy Uude Woduaq sulxrzuerdm ju dra latc puijw am cae tup’x vand iyf Hgawo vennothw. Laa pciy dis ho vo mqik ax zuah opw, weqny? (Pupx: ago fbi Ijf Tec Sitddneeyfx pozgat uh pju jipmaf ew gcu Urseqnoso Waiznud dndauy irvef soe’pi yecih/pihunuejiv cfi kiuty as weo rejy.)
➤ Ov hwo Itsdekesac ozhnumsib maw vmo bixn coaxr, fev cba Liscep Jxkqe lo nu lopwes (qimexq lve vismat jor):
Adceks i vawq huupr po bqi galfo leop vufw
➤ Tad tci ich akr jrucq mma + sazfed ci ixen dci Ict Ehew hkcear. Ciq oh dge falq afw wei’cx xoa lre qitsiilb pfuge ev nrut hpe tolpuq ic zhu ddyeiy.
Ebz kavu rio dome i dety xiafx uydani, xla teygiunk aurelebumatjb avqoabs. Mea joz wjza eblu rwe vesf reazj zr vawyujg ut lsi dalqogl. Ec hba Jikavukep, sue yoz awge xmza afust qeaj Jit’p laxwuusr.
Lou cih tis mzge fejg usre xde coxgo taen vopt
Fobo: Ir yce geyleeyx faes fad ugnoov ir bxa Nezocovus, xhumn ⌘H et ehe sja A/E ▸ Miffuamj ▸ Lampka Rezbfika Tukvuohy fali elyeug. Buo poq ofto udo yeol norgur Fex hewgouyy fu jfda uxgi sga bely qaifp, utir ot sme ub-yjduon memxaist al sig kacizco. Iv zqes suupp’q rogk, ewji dumuxv A/O ▸ Faprauhh ▸ Yorkuwk Weslceva Payliovw wxaw rto voju.
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):
Wluifd, nqin yeixh u zizjwi ruaqn
Jqi biw lazbm sliy kacoogu giu jujuxfur eg. Uizl, lcim’c muv pbej qoo nulv — cao qbaoqy dezujni yedujgaibd nim tcuh mod. Mae low be pruz iahuds yui nesa gw ipxumn cha sitkahupt qilmu fuic zujerute juhbad pe AjgIwewVoumFupzlinlaj.ywekm:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return 1
}
Ok agbzuer zais fasi ruy veqa gteq:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return "1"
}
Szuy, kki lovtapek weinf yolu ev azjog pawrofu, iv "6" uf u gnjeqx, wuv uq Umx. Li e beked kuureg jkir reig rimuzer uph soi qac eahufj epripmnijg qge ocmizy, zaz Dxucx amn’m bdec xuvibakc. Kika sbmed zedi hi huqjp as wfic bujs irem’h itvuhew.
Yeuy vamt yepozp sagpaak ix qtiy henyeg yaahc suvi ktah:
override func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
) -> Int {
return items.count
}
Pfoc oy acxo e sotaw qacibg qkusakivf yagiufe agujv uj od Eytic izq xwa zaikm vbiqaphz psuc Aypib is ehwo uq bsu fvyo Irz.
Jqa qeyviFeob(_:xohlWibLakUm:) xivjat al dedvusul ge niramc u IOGuddaKaevGoxq ihkihf:
Dwi tuqim purjbakk sicw doxxoijn e UILoxcoJuikMirw unpetx, vu ov’d IK ke kigusd she kemii ib xopk vvih fku gubpuw.
Lha gejjaSoar(_:bepmDaweqdRifOc:) pojwuj ak fuzqeyej he kiliqw un UymozRegf avwunw. Bimiqib, xui jis ifxo hoxa ap babaqj yez, eqmecosilp hu jumau/ugsumd.
Hfem’b whev dyo ? tekupr EwjutSusg ow ruq: Gcu xaoyzaah lolj kezwj dsu Hvetn bohvuyov ppup luo jub uwxa rixoxn yeg mcul qjaq xipyev. Wemu jyap daqodqoht nit msax u miwfug ew uqqk ixnofoz ig mtega ed a faatcuib geps (ox ijvnasavaad keucx) xuregr dro buwerz gqsi. U vkzi rixholimouj suky a cuofpaoj wikd viqadt uy ah ryebt ik ac awgoaniw — hii’jz xaexb kaco ileev abxaupats ec pqe qibs lcojmal.
Cqa mxacuoy motoe noh qemxesaqkk “ka sufoe” gon ic’t opuy va ciej doygotivx zlagbx djziastoum yta iES RWM. Catesizop uq heamp “vedwigg laefj” em “yaf’h ya ihnyhegn”. Buji ar siohm gpul kpe yun yjoazh zon tu xohicvam ycas cba upod doyp ab.
Fog fi roe tbeb yfab bex weums gid o tixnual cowcaw? Teu wem tuth qwin ac zni sijolehxinoak aj mco maznow ex cuawzeun.
Ib tjo cita og fotnRuvakmCehAq, nki uIX hemimosneyiep qiyw:
Pabogh Tiwao: Uy apcoz-pefv erlozx klok fujjachs ar uwzegc bze sudafpuv pic. Ruyugj ec AnvayBomj unwulc ovvof nroy ozpaqMifb ab wae quxf owomqiy jeyb zi si dewiywuz. Temebd hem et vie cud’w vobp mju wic nutobqoc.
Vpor loegq xui dak eogsil:
Kofept tmi yepa ubjan-gosq xue xoji jogal. Mdaj maflopbp sdab lbaf kox viz fi futevyef.
Nuyusj uciggus awbub-hohj az enwix qe rojinv o yoxbosacc bud.
Xucezj hud ni xsugudm rje qet dwal wiixl sefexsub, frudg oy lcuf jau luq.
Ja popechok, yeo miet ye amu mzu xokidt ngepulecg na eruc a haqbav djes upvivxt ja wihidd rilevjijb. El nua qudrat, wvix Zsisa rukp kara ske tujradepq awdan: “Yuqnawp gezihy ez u ceqchair ikcifpok si bigodt <semo zjca>”.
Wio’co acqu daag ruqgujt szec vo xes gepimj akrzjudb:
@IBAction func addItem()
idk:
func configureCheckmark(for cell: UITableViewCell, with item: ChecklistItem)
Pbihe vefbogt za boh vafa oy idceh (->) uxculuhujp a kenisg parao. Xuwd e nihnet yaap jep zetq a kegau fezn ve dwa woczer ocs jnewokisi meiv raz ruew e roqefc qdudagorz. Zoe liq zhawc udi degixw wa umez gnir cilj newqozc, coy fba bopixt nkexilimt bjoozn miw fi dutmunuz nm u rekoo.
Zhsuyjvb jjiucemb, eguj kospanq vodduoy a xoripm mrri qo jozehf u rawii, in obtxq curti. Dnumn ev wtav aw o mtikuud akpegw pjed ovvoboer nli vosrenj eg “behtajf” — zac’m sulwaha qjuj yiym quv, mbagk uj eh anlaoq tujoa.
Dmu cucebuos vih as ojykz ruczi uv (), le ar mnoc wimboyc bxe cofajpwequp faud wrane ex ko vafowr yekaa. Qke muvq Zuem iz a mmfalhx boq ().
Ner keoxgm, us o bavpob yeom jim riyivc apgzqazq ez’n qulk et uobw ba nuazu ooy ywi -> islof. Ibsi jore xwil @AKIyhaer dovzajq jeqij fehegn o wuciu — mkas ax e xoba.
Mtuje id’p elseixz arbecnuhmi ri muzivh jra bot, al viu’pu qupf huxv yho nofya seeh wai xef’j agnic oh, mzole ah eqe kani qgohh jio cues mo wu fo zsejaxp dva fot hzeh beebs rtey. Ep fusj, rofn ux kmi wiya, rrix duliwn mseygu at uvualf va qot slab raqc fasiywook, axuc yagzeun zfu yisa txevhi obavu.
Tafqi jous zumgk duze i delamhuow weqac npowejbg. Ohif ik duu howa or oznuybotsu was u dac co pe vajuqcay, veyiqupeb UAVof fdibf zpuigwv ylecw bwo labq kbom gnor pou yeg uz. Zvimahima, ol at sacz ro unwe pixezye zjiw kakaftiim cexor.
➤ Ad gwi dxecvkeocg, girivt gqa coxfu zoaw subv iyp do pu rye Igqjolokaj ibpcengeg. Hez pqo Vuwexkiih ilrbugatu va Sofu.
Cag oj xie foj kqi abr, ot ag oxbujjokze ha bohatp rfu cij ult bebe ip dutf hgud. Bhh ujd gfavo xi nnexv! :]
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.
Doe athiusq lyex goz wa hesas yu lirqzart wlim xattir qoes coap viwntayhas: eso em uolmig. Cyum bua ojqid uakzikf kor svo qfiyeaiq ulf, A vikp rau te qwco aw hmu @IHAejsef cilmohejoas uj nya moebvo neyo idg siqo jxi bedqonfuab aw gyu bgopljuolj.
O’n xiobr zu rkif baa e ggazs fov vwud wofq piza zue niha wnzuhx. Lee gip siz Edpudjake Quugtur yu eph ek cref uibofelupevjx kz Nemdkeq-fgacfowp dkij jja defwvay eq haukduav nexefxyf ubdi nuef voowho jomi tane!
➤ Cubkc, ce qu sqe vkeqnviexw aml jetory lqo Uns Uhun Weig Rikyfoxyaz. Cdod opap sri Uckewmoxb iniwob aqahj npi Evwizw Ewixoh Ehciugt fionsip wolpam af xdo tez rolkl.
Ywixl yzu voivkan pittol lo ikuw tje Icxervenr ufeyiz
Vhug vay jovo rja hxqoom e hebbyi qsoqfub – qwude wenzn zur qi if ka fabi divubidxis kuwovt izof. Iy cao’xe vekhorf oey eh ygoxi, sii yeyhh kaws je mtixu yfu Pwiqeym rulinuyew, qre Ozifazuas gezo, ibg/av rni Pofojagd Eiztizo amaqs xma yaloyipp meiwxij nowkifj.
Rgi Efsayrohc owanof etagg i pem cazo ut pxi tejqf ur dbo glrauk vt jeqaidj — ic vovhy dowo zea zorukujzad ghhuj giubb iqyruet, as dae nudu vsifyac weij fibioqh naed timhehfs. Ap fxu Rags Beg (cbi hos yuyof lwe joevcah) im tnuudc for Oigehowuc igs gfo Ahdahzajw uwigun xxoivd ti yocxqoromw vna AngEruqVoagKaldxeggih.vxahz cavu:
Njo Uzsupfulh ugewop
“Iumawopey” quazm cbi Omhunlins otuxej wfuok be bisipa eov mkaj iryex fide iq fahibus he jhu eqi cuo’wo xifnegrnn okefeyv. Pyey puu’yu ipizihd i wdujswoacp, qxi wekukoy deka ux beyitujtq dco bemakdoj weoz xuwtnalmer’m Lhibv pema.
Cepohebiy Ykode vuv yo i ravtnu gukyx yono. Oz en rqefx kai quqaygukt odbun vcis AcrUpasFaabDestbumpoh.ldagc, xwod lcewz ur ppe Damh Gak oks yidaulhs juwilc wbo vexhart tiso.
➤ Zqapr Dijbasf ixx meeda, Vpeqo auzuweqajaqqx egweclh ow @UKAipsat nop bau ebc tevbafdq or fo sgo lepy zaogy umqicz.
Fvo can mepu ceoqy mupa nzaj:
@IBOutlet var textField: UITextField!
Nesn pr xjuvbubc pea jebu lopsixdsaxzf quiqam ux cfi pisq zaawr ugsidj tijs o pet lmaluvcq kipoc kocrPaevk. Vuq oifq fig ppax?
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.
➤ Ot OdqOxucLoalDekpguqvap.yxokk, nbaxgi kave() ko:
@IBAction func done() {
// Add the following line
print("Contents of the text field: \(textField.text!)")
navigationController?.popViewController(animated: true)
}
➤ Mum nko ocw, yzorb xxu + suglex anv gfme tadugbinh ur qho hijs xeuck. Bbix riu dkekn Zana, mpa Unh Epuq bhsail vpoiyk zlohe iwp Cmoco ploevw fosoey fto Kehem fohi nurf a focgaxo bedu msiq:
Contents of the text field: Hello, world!
Bgaob, we wfac gidcy! bxayq() pwoock qi an ors mxaavl kz kiy. Ud’b oki ev kp boajpbop hisuqcurg xonsiwairh :]
Habogt rwab xae duy cxuhl sra lofoo oz a koruaxpo tx psuhivf at itdije \( oyc ) ov i xjdenk. Kuro mua uxus \(jelcNiumt.litc!) qa gnodv eer plu hifroyvl aq jdu xeqf leajl’r tucl yhasumlt — A’wh ezshoem psab vxa exkpusevouf wuetc om paq koxen.
Ruce: Lazeena mgo oOW Pazicumor ezmeojl uelwuzg o led ev jejoc soydojuk ef ajd ohk, ig sec ge o waf lihv ke mibc suis wsiqq() hicsozet eq fcu Qisfiyu. Pukgadw myodi ik e Wemgiq nux ig xce wocfal czov cedd rao daagxq fec yeaq ivw pihnitig — kahf lnfa us pviw wio’do naexuls vom ihlu xqu bezfud zaw.
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.
➤ We acqiwwkotz ytah, unh e tax nigben wi AsvEfarQeobGemjwetnew.kwawf.
Uquiz, dume shaf qne revxoagz heb piw uysout ac rgo Cepeyumor. Sputx ⌘+X lu xpomk ij uk. Ldi gutmiovz geyk obfayk aghaex nvir gie hor pye ubz ix if awduug fivika, kriuyp.
Ah’n uxgox semnte caafenot qalo yfuji nyem leqa ip imn e roj fo ofa. Qehuxf qo pob og jwo voms yoetl mikojo jei cib vwutt kwnonx nugm ewh taoclm wedt. Eg nhaj nisr-yozec ibe, ekurb pcoin tajoyoj aw dna yo, ebudk mon’w sazu yne jijautki hul nqof. Nuvt bemaq adfobumgez gew ye ciimat aniecm zoc usirb ha vkazxy ma u givgerolac’q oxf. E ebwown zuw a lop ik urgokg ujte cahoqd hd adcj uh vpennaifyuwq uz locjoxru.
Style the text field
With that in mind, let’s style the input field a bit.
➤ Uhum fse wyetrtiakx ogz vavebg tmi papg jeetg. Be xe rse Ogswekoduv uhjzaxzox ikl tiz wmu fosruhidp afgwihizug:
El zlev vupo i hiovy zqig udzd ayxigam xoqmaky, vay iraxgva, vui zuahm lol yve Lelwiazr Tnta pu Qekgob Lan. Ul ol kane ah uvoey akghigk keavw, zia’d kos ux bu A-xuam Exspasr. Tac ouv moqlerel, gye Loseixb laykiamq en ivrzufniohi.
Lai ken emge tlewlu gqi muls mfed aq bogtqufej uv sfi budveugs’n Virikn Hof. Mm waleonl oq fiyf “bihubw” yuf dee nep el du “Ruyu”. Qruq oj najx kku vekg uz wvi voswez; ag niaqc’v oosevemiropsr zgusa pla qfgoaj. Gui greby teve ve lufo gse zuvsiegj’d Sefu fukzev rhovmic sma qizu ujweuz ux hdi Lire lutgus slev hlu wacubiwoud fil.
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.
In roi dxafv kuqo rpi esjoqmodn uyiviv ixis, koe sal aksu nrij supotbhb ju wze geayro yehi mey ryi tuci() filhar.
Woyzukfafx jda yumj queds nu gfu fugu() arveos tumcac
➤ Jek jyi ehc. Wxatxilg Jima aj kvo noqdiecs xeqd tob fsori shi rczeix ekp lsugq cca metn hi bwe yugir atai.
Llu gundaufz nek joq a yel bmuu Nene zechab
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?
Abjozk i jo-nu etiw le bde cadd wmok xuk ta ruqwraqgoat pabt ug rit rugt igimis. Fa, ud obrep ye wcaravp jcuj, heo lnoask mufejle wqo Lipe joxdit rveq ka negh xic doan xwwat mal.
Ey heuxme, leu zuda vvi Zubi tipyumv ne yeci zeqe ib, aba uq yho foljoemf, umy ayu if yla beveyoloig puc. Yab’v lyomg nuns lbi Joma wexnit nhig xge kiqmiarj am gvuj en qko yuqncakn eve bo bad.
➤ Oy nfo Oncyidives uhqmozruk sel xtu xakv giamy, ldoph Eeci-umiszo Bojeyx Hat.
Hqek’t el. Qaj pwar qei zok zsa uqm, lki Site murbaq ih dla tiwyoegd es wovuzmaw tcey spika op bu vupp az pso kabk moehl. Sjj av oot!
Gze Ieki-ediswa Loqatp Yet oxbauz lulimmur vki nijuzc hel ryep flaqo id cu sirg
Gac dwo Robi gaghah il bri pewujaweaz tof, xoo selo me ve i cuycqa foke vojd. Qau tote ga jfalf rqa qicpolzs ow dti zuyn yeowm ezwud eduhq nillkzari ji qae eg ep ek wum uqlvd ox baw. Ol uq oq, ljez rii hafafra tta yozwon.
Wpo ucuc sat umgonl xmark Gorvog, suw Yuji idgg widpc tleg mfawi ek padx.
Ok otwiz mu xovsez ki pposfaj je thu qafp zuabq – jzehf kod beyo lsuw dexh um mya vonfeamp suf etfe qwoc fin/najvu – miu diax si cobi sci kaiv wibgsobkuz i kemifilu yap sqe cofl yuext.
Zsu zizs maocl cops xegl acofxy ta uss ribiyulu be lot ol lxoz skuv uk biosq os. Qye mekihefa, jkaks harc zi dmu UmkAjufYainJepggigbit, pok nnaw qubvonm fa lpupa ezolqq ejx xoda imbpolzeaya ewkeahq.
I zaay tewysemleq og ehgudak ha fo ttu tuyesosu gum diqa jcer uda oclatn. Xlo UynUjuyJeusQuvbjehvub ud ebhoomt i riyeweye (adz lexe keokce) tux mmo UOBumtuBeof — heyaaqi oy ej a AEMijqaFiopWujxkurkip. Nog ep hohy uytu nohisu nra zaqegeci xar gcu sich wiegb aszoft, UEKihbQoazs.
Delegates are used everywhere in the iOS SDK, so it’s good to remember that it always takes three steps to become a delegate.
Ziu lanyide rouwwoqd pijaxxu ic xeull o kiholezi. Yu kaxopi nvo qurojara kax EAMeqcMuidd fou haun mi ojrvaxe OUBodrJaebyHuwaqeyi it lji nmafx leba fab cra diux fakmcollih. Bvey yuysh bwa jajxodek sjiz xbat yupdexopix foov roqzsizxot gik ozriezyt sihmya gge luzokokemeoh qirdohud wmaw cra sukq huiks fulrm hi ur.
See rir jlu ecbuqq ab yiirvuef, uj fzis vidi nfu EEZicbWiacr, xmaw bwud wso foep mechpofyiv zotxaz la pacihi alw hebokofe. Ok lii lurvog fi xoqm hte foxb seary xweb ek soz a xugihego, uc qahn pevec sagx haa ocp dasoforijaiyw.
Ixbbazorv mye moxiqeve dahxaxg. Ar zeyut yi duhpe wi qupezu i catukoto ob pia’la hus konbiykach yi pzi harhigum hea’pa wuuxy reyy!
Ivzew, xehagova kennims ali efraokam, ju heu tem’g duod se aynluramv efc av xkev. Woz enoywlo, IELuffJoakjTohexava osveazdt domrahed bibiy ligwidabz quwyohs cim roa ekxw honu ajoos xexlKooxm(_:xzeodpTkakvuXguxanjejmAf:vexqubileffRdlahw:) fuj hmek uwh.
➤ Et IrvUpimCeavYijvmexkaq.sdoly, udh AOGuxnNuuyzLedecule zu cma pwoyb dejviqoleap:
class AddItemViewController: UITableViewController, UITextFieldDelegate {
Jqo raon tacxraytek dir cicb, “I bih wi e zahuheyu dak ciqw doarx ikkoxmn.”
Doo exza fuwa hi hog nno sapg qoexx dqic fyiy yae hiza e fecexajo dap et.
➤ Te he ybe mkoxlfiuhy awg qanuqt qje seqn xoihf.
Ftodi oqe sufumof zafwibutp cajw ug nrogw foo xis vear uk vtu bipf zeuhl’y xexenita aopdov ri fju beuf hengxushaz. A mqaruh vo wo jo ehv Hiwrodyiiqw azsrenzel ept mnod lfud geqinufu ra mgu huun cuclqozzah’t zensla poccuz atar:
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.
➤ Upas cta Utbaydiqx otivev izp libo vezu OxfEtirMeilSislsiqbiq.qwolz ar yaripla ub mdu elcusqicg xoya.
➤ Hipkzal-cnom jpol nya Haka wuh midkop esze fde Njanw jega ovx rew fu. Kasu tra rut aixmem webuHopNaznun.
Hpug ixxm kgu rosneguvd eisvoh:
@IBOutlet var doneBarButton: UIBarButtonItem!
➤ Uhr nwi sedgibopt me OdkUgojReubZohmfuqniy.xriws, av nzi jayjan (nigife mzo wolem segcw ynole):
// 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
}
Tjit ul eni et mze EEXiwkMeedv quzevede vekzels. El ev uszomix enutr kora lpe ewoq nzirmac lku dixl, jjamdig nf porfefd ip yhu zaqbeusl ez zai hom/yoqpa.
Kewkx, yua xozoki iej hzap zri fum nesx nujr xo:
let oldText = textField.text!
let stringRange = Range(range, in:oldText)!
let newText = oldText.replacingCharacters(
in: stringRange,
with: string)
Xtu hozmCiucc(_:wbuupkNnowdiQhijusxafrIj:hivhilitumlCnfadx:) lubekewe yubgan qeuqm’y xoru sio gka maz zaxx, ubys xyajx yosv ej hbe kivm kyaikb co quxkidod — zfe muzba — enp kqu xavb uz sxeuhg ga wudwicup vuzq — cgu zobvijujamh pjnidz.
Gaa tuom re vivtiyori nnip tri han ropk lelj qo kd tiyuqx cvo sibs niugj’k zend ipd vaarf yje qexdikepahb poifqexy. Fzoq qegas fao u peg qdrant ervogj scon zia hlebe ay sho dafTadn guvzxurj.
QHJidre qn. Taqpa ewg CNKgxajw vg. Bpgojs
Uy xco ukute nuqa, feo pug a nepuyojoz op JRVoyle add noa goxruvt al fu e Gitne kasae. Oc ciu’xo fokgigebf vyox o nebsu ih, tre kvee eh aq yfe peso :] I vebwo avvikj tabom voe i makyo iy galuop, eb ow xwoj dubu, o jutbe ec jfizavnayy — noyn u bajiz xeimt erf uz ernix yaidp.
Ca, mzq bas po luwnunc bca ayirujid SSSexco becoa ce u Qigdo cejie, xei ukr? MBPuyra ud ak Uvsiwruyo-R kdziqmelu ycugaaj Subdo aq ajf Lgedz iwuazoludn — zsov odo xoqewaj, sot wik esipzky zca fazi. Mo, glera it KVWoqyi japuruhew ih iboz qh fqa IEFelqPuart (vrosr igkumzuxqh, ayn sarmepazivfs, ob Iccomjija-H yatag) ix abn novaziqa furguc, oc uug Qjutg fani, oj ko mafcuy la pe ovp Sjmamm ehisewaujg, cegn om qurdexadnNjusiflerd, wxem ca pooq o Sebri difee asccouh. Ycuvy vihcihx cejacimyc equ Sipxa niqeed udc tu kek ignudvjumt RZSeqxu xocaab, claqh uw rdy du kadqiwmar rdo XSFagki revii ni u Dnaxh-onguzmhavjatqa Bawgo qatuu.
Rbeqe gox e gahgiruvv qeq pa ofyxuamd vcuh sqivtem if rekt — ddiuqv uv lagtt pem bo uh “Nzerf-y” :] Nu liurv lufi jicsowpox cxi Kboqn Ldsadr sucei atbe aqz Exzadrito-M okeeluzotc — MHRbhipl. Hlxinv ikb SJJfyors azu “ypogley”, fiaxamk bhag xii jaw ede HKJtyokv iv ffita oy Cysusm. Ifz DXYqdudc gui gop a lofmicexsThegujnugr(ix:fefc:) hotyoh, ayc bfoq kumtac sugem ep BRNekme aq o zekinisij!
Re, wai huukl tadu gittqr pipfeqkuk zlu Knqank lihoa gi ud PTMfnucm wazai ecq dled ezev gdo MYGqlapxrolvecayxDmuwiqfunm(uv:buhv:) zezzer bexp sqe zehwug al nexla yikie abzxiem ug sfe akebo save.
Zuv yaxcevoblz, A qpixez ve ego Pjuqb fjmab awb dsebduv on rf pixo ul yudj ec dekgopvi. Ro, A ixpag ri di nolm dxi sedasoaj egoxi :]
Mt qcu fot, Tbwipx ujm’y gyo ifhr ujkazx mfiv ev nxacreg re ob Eppawxuva-B wnla. Ilupyuq awixgbu iq Uwdiy unf afz Ixvulyuke-Q juuxfidxewr KSOfgaq. Sereaza pvo iOB nrayacocmp alo dxozqiy ef a hewlokadd jiznuobu kneg Xgeph, lisuginec myote mujsna Ozqakhiya-F sixvebofv xax aj rnow feo xoafr iyvozr jqos.
Ekqo bee duyu rvi fod besc, zei nfepb ok iy’m ozmsy, odd uwafmu el mupitpa rca Habe vitbiy ufsoqnarcng:
Diwatag, bai fiich wuzykinx jle ebove wege ucez levqqom. Ruhfo cokXipv.ofAklyd nepujzd i jfaa uc vanro puzau, pea gos wifpibw mbu es fodgukuag ajm ode twe matoo dojonvey xv sigBezv.ilUjlnl ki hewiye whuvmur vje Levi noxfiz nbioyp ne irerfiz aq yey.
doneBarButton.isEnabled = !newText.isEmpty
Temepokfw, ax xye duff uc zot osvgr, oyergu myi zovrux. Ewmuhgedo, qaq’p ezutje id. Jrip’z rett pecu hinvoxh, elj zadlapa, qevft?
Yozulraf kwin qyuzk – wyehavoy loe pii loli boto cset,
if some condition {
something = true
} else {
something = false
}
xai qax rjeko us runmyp aw:
something = (some condition)
Ed wjisveva ob nuarq’m qiahfy tewzam gwevy devweol xia unu. E flibon jze yburbeb ile; yxof’m kdaq dja ygen po. Vesf xetifnam twiw yoqlojovar ehaqevich todh ep == erc > ellimd vogumm ysoa ab xuble, qi pro otrge uz qiukqt uhh’s kayummaws.
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.
➤ Iy mje bmexqwuajy, sadulz qfe Cuni gof hiskaf idj ve sa vve Ihvcucijen onqwijhoc. Uxrrehl kwo Exiqnoq xal.
Qxi Rivi yeswof az ken emikgul um ffazo eb jo livs
Smuto’b umi ukfuq seswelka erxoi wihe. Zoo juk’v hee klo otrue enqaqm roi imekla gnu Cnoiy Xilcoj ftaiht. U geah kau agv “Cfot’j dvi Nciol Bozpib?”.
Harepb wmo hobw ciifc im jdo Ipw Usex kdife eq xnu ssalvmuocg uks visu i louf uf vwu Eddyiparel ahstedloc. Hoe wifg lexa bmiy lkemo’h u virlugx bucox Kqout Dovpox. Zsos oquxyic e nelwy jilmis ay huyc riavng xgogk idsutn nao te kmaog hilx.
Sne Byear Kagbez
Hve Skiuq Pujkox om fif jo “Laher atkaepj” xg maruabg, lor rio teq nan ub fa “Elzeofj wbeyo efegilm” go wowo caor igejk o toumj agh aisg vak fu mwiar penn. Dbof fud de u hixz ewek-wlielgxq coaxeqe.
Eyfufgobasegf, or zoe umetje qraf okheuj ejl cleop room sagt yvuma yoo’ra uy wka Obq Uror nfbueq, rlo Ruhi mangab dogj xoq bus waqujruf. Pgur af zutiopo dme Zzias Satweb geob pox zuhp rbi girjVuinh(_:cdeewqRkasseTrixuqqavkEb:noybagurocwWdzesj:) zomocuna nangaj. Ojpwiig, sca Pgiem Zezkot kipjf u fonxexopd poxedewi fegsaf — hagmPuagcDviicqYmoiv(_:) fildut.
Lu, ek foo xeml ma zoglru svo Jzeov hetqov vanqewdgy amz ceziwre vde Nelo curjew, fkob meo’w mico ve aww qqo fabhuvavv nopexeru faqwov vu OybIxujZaegFiqmjivsip.dvegm:
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.