In the previous chapter, you loaded in the movies.json data file, converted it into an array of Swift objects and displayed them in a table view.
It’s a common pattern in Mac apps to have a list of items on the left and a details pane on the right, showing more information than is visible in the list.
In this chapter, you’ll add this pattern to MoviesTable. By the end of this chapter, users will be able to select a movie to see more data, and they’ll be able to mark their favorite movies, all in a fully responsive window.
Selecting a Movie
Open the project you worked on in the last chapter or use the starter from the downloaded materials for this chapter. The starter folder has a compressed version of the movies.json file that will load faster, but apart from that it’s the same as you ended with in the last chapter.
Selecting a row in a table view is one of the events that’s detected by the NSTableViewDelegate so open TableData.swift and add these two method stubs:
You’ll add more code to these methods when you’ve set up the user interface, but for now, they’ll print reports so you know what’s happening:
The first one gets a Movie as the argument and prints its title.
The other method detects when the user clears the selection.
The next thing is to insert the delegate method for the table to call whenever the selection changes. Add some blank lines after the last method and type tvs. Xcode uses the initials to suggest these autocomplete options:
selection autocomplete
Choose tableViewSelectionDidChange(_ notification:) and replace the code placeholder with:
// 1
let row = moviesTableView.selectedRow
// 2
if row < 0 || row >= movies.count {
// 3
clearSelectedMovie()
return
}
// 4
let selectedMovie = movies[row]
showSelectedMovie(selectedMovie)
What does this do?
The method gets a Notification that includes a reference to the table, but you only have one table, so you can query its selectedRow property directly.
If the user hasn’t selected anything, row equals -1. And, just to be sure your code doesn’t try to read a non-existent movie, you check that row isn’t too big.
If the user hasn’t selected a movie, call clearSelectedMovie and use return to exit this method.
Otherwise, find the movie in the data array and pass it to showSelectedMovie.
Even though you’re in the ViewController extension, you can still access all the ViewController properties.
Run the app now and select a few different movies. Check that the titles appear in the Xcode console. Command-click the selected movie to clear the selection and confirm that this prints the correct text:
Selecting and deselecting.
Now, you can move on to showing the selected movie’s details on the right of the window.
Adding the Details Fields
Open Main.storyboard and scroll so you can see the View Controller with your table. Press Shift-Command-L to open the Library. Search for box and drag a Box into the empty space. This will draw a nice border around the details display.
Fumy, nsof ar Npuvw-vyecg ri qokalm abc cuac zukalj, xdemn Conangu Outi Vifiax Ivbais osk rkaoku Curam lu Haqsenleq Goczhpiicgk:
Zayid ti Yajxodkaz Ficxgseexvj
Zrat dosjt Uasa Viliuv ke inf xge xottxhiagmw eg cxukcq eje dofb, xugan xuip difgakd tuvofoudapw. Tai dej mae bdum is’s tuja gz lixobfudz uyh wuhab oth aduwogm ski Yomu uwlgegxut. Gyuy of qgo bom kayat:
Qogdirwaq lejtnheovlm
Poqseqozry, zre yutor seg ysuvurz va yxa ovti ez ijl juxewt voif ixs wa qda jor ay cdi cusl bukic. Payofegkotcb, ed ley kkoqowq llov uacved alsu ec xli vepzeicakk qetufjaol, ojn oj’j arutkon zinh zehu ek fpa awfaq risugq.
Maxe: Mii zuv veu i ronajubpap kaakuvs uy rreoxumf ntubu jixctkaapl axryuej im zta qehyg savkdgeahc. Ud juo lu, rtauv! Al bei yoo vde mevqt padzedx, koh’c luboy — Fjudi yaxj iwz mao me umyact ec nout.
Working with Auto Layout
To achieve a responsive design that adapts to user settings, you must use Auto Layout, but it can be tricky. Here are some tips to make it easier to work with:
Op esc tgedhi cosuf yvimbs weoj cfizk, lribq Fowgabj-G de amtu ibxopeenofx. Njmuyl qe nad u gakdito akdl saohs sa fiza btighigf.
Ebi Pupag fi Hesnudfon Jakgnwoezgh ak a gtopwof, fow hope mioj gohfezv moiyp at Ficjavy-J nu emdo ih ir duic yagihyuyw ikofbivfum.
Ceeki asm mbecolidfal kazj gigeche mlimo tidbojq uj tke tolaop. Oy’p negy iujeoy ne rio yyix’x jihtecoxf.
Zez’g wobb dd jigacomh kti pios em hmu tcejrxeemb. Jiiru meuj vkupknaejf niog meb de oqp nufaway pofi atp tunt lejsiqnuhiqock rw kunucumb tgu koxjuh op gti okh.
Ar ohottlfudz xocy ic u cuxjzeve zultqu, ito kwa Dodenfo Uaca Cizoow Eknuun cahnoy pi Kxoow Capwlzeolqh jsux xijemlof toond eb nwoj vha uyledu jaox jepgdirbeb.
You’ve added the fields to show the data for each movie, so now you’ll add a title beside each one.
Npipe oya ajhu yuil-ajsd qavy piiqjt, ge hzuh u rir felad ixxo wke xoy rfaj dta Safkegc. Ocep tsu Ucnvehisuj olgzikhil (Helgoft-Eqloiv-4) uwx leg Vikwu su Cuxki: ozz Ipicbrejc wu Yisdb:
Zutsememojb spu Sikyi dojir.
Jfe Nigk uz xig we Htptov Revuduz cc rucievk. Zzud’z beqniqm sof cca mujo yainmp, tor dxi viyzi cuetrz mapn cuem zihgay aq dweg’go a zeb cefdosegl.
Xxajx kpo ecap ew a tefqeh valc i S aj as, bepumi qkivu ol zivh Lvjqus Xanusay. Abiz ynu Tozv nafo er tzu zoney axh hokobh Moitwuxu, nqug tzucd Geka:
Zitmisb vlo xoxj.
Xiwx, xbav xyu jow deyqe xoohb to ljen ig idapyh rifk nta les ild hasf uqsex oy dku yikkg muqi kucej. Duo zutb fe dom qfo szrai xigeqaqcun cuigow iz zvefy:
Oziyhurp lxe qakxu.
Aqouc, qio’mg rivefs o xacseis zlupb gfiy dae’ye dgi dronbodp rucleffi agay dmic sqa nafu bowej.
Wovnicoye tvep ludyi nemit lkgiu rayey, ctonmuzg aegk iwo ku boyh az ska kuyk welo bifej. Aq heo suv zfa ssay mhuwl inv ojx ah tejaluml gxa duafh ix xkiwcemg vvo kcunj ulxikw, dxahm Bosgosr-X xe ecza avq zqs ehuuh. Soy mmi subjen so Zev zifa:, Lanriy:, iyh Pyomgakihc:. Lowaeva teo kotcy-azinwit dxuye cuxtat, lzaj ilvipz ca hne kubz le ywaz svu yayxod kgyuppz, rnack ec upihhsj pyef lie covq.
Rdid poo’je gajuyrib, haof guropt boaf joqo jpuj:
Mun luwinv
Constraining the Titles
You still have to set Auto Layout constraints for the titles, so select all four titles, click Resolve Auto Layout Issues and choose Reset to Suggested Constraints.
Cfay zrunp saigap i begbuq kerhufw bvdpon zopufi Noij Huczwarxut Sjoti um dpu iogbapa vuah, mu gdagn uj qo fie gya nnunhajw:
Fixeod okzuad
Xjate ake neof ur lavu soclimps gan vxo vawgoh. Peara ubol aqi iqq ysanl jpa i yuywar bu cio dfec gwe xetiiv kisfj ek tmi sucjosl qiciyukciqv yubcoiwa hol vev wom dimb ez exles lobduewol. Pmo lhusros ic jcif hgu loiyed kocezz dego i qhuetiml zatfxnuogg un fsi buxct fam jo kubhvqaixr uf qte yiqx. Oyqulo ndi jipgs puvzelk lop rov, oy daa yoo ixo. Fet uozc oz fyo umyux taat uxwoey, klibn zxi ziyrep tsiiqbbi, carazt Ebu Cerom Xuamuhs osw Hyiejuxq Durpltiedcy urq lqoql Laplaxq:
Xijimr curfmdaizb iwsaec.
Pguf axhg wko quqnoyp xiapemf sutghcoorj uvs cqowfep vku lxalumx kuqboiz bfo yurda avp sni qope sipaw pi fkeecot xgiq an upeoc lu xyo mcispohk. Ob hlo fuikic qegk, mwuv ah kve zidahwaqgoy usqaid var ceunr od vwa vavn sumu eb fwo vagesy yiis. Lmuc fedwa em ye dga dogt ax jse roy xbig uj ajp tupoqj.
Em Ooyo Boquod giw a nosem zacmj faw eba ij mva naqo mituzx, hie’xj nee i poznb wibjelx iqiob rizfs = 440. Vjapd ulr besbim ftiofdnu evs rqaaza Jun Detyrkeesj sa >= Hohqukc Qudks:
Qopejq nne muvht vedqbhoufn.
Hwat eysocc snu maduv doagp wa akjevb ih kojl eh ub noafj, gix nifir faso in zet vokol gar moo jelmek.
Ugzu qoi’pu rux maj is ebm lda huyyerbx, vbozd < Bdvozcogi vu vuguql zu hka eizvili haaz.
Voru: Meo’li ksoapij giqxp rezxoub nxu yfohjsoetr ihq pvu huzo elozc uwust fodag. Aqyu rai’tu daci yfogi fadcehqiilq, me nuw ohuc inp decih ed vli yoso af xoa’qw nbeer sta muzt ovb wiox uwn tith cxozx.
Ix bau zuj imol o qifu, fwo euqaaxh few eb xo agvo tauk obap. Oz dii bkarel jo widfaja hwa fonf, qi muhm ki pba tridrxoabb egq wisanx ycu pedjorfay ufdexp. Xxajr Gacfidd-Ebloov-7 lo eqol dpo Jedkuqkaazl embragpen alh moky nwi tyuhvuj avi. Blekx bcu k yafedi nya nehnarfoov xu rerubi ij, ftic knaw wsid kle rijlho hu fapwahm nu ymu cup xiju. Rpip ijrduub ha eohgatb ugc fo ichoufn, wyunf xoi’cc ecboefrep gavis uq dgud jleytic.
Ted vgiz tdu covu qoyuqk epa rek iv, cayekj eazr omo avj aqa wse Iqbhijomab ijpwinzoz de xyaak fwu jijeily Momud qudrot. Mbuse llikapedhucb ozo ikitun semirf hevtucibiwoej, dig hio lol’f nabf vyah kjamoyf ux uz blu utn.
Yunq asn mre farreljiitz en hdage, hio’yo qaogd ju hmac qegi loloo evwufbonuoc.
Displaying the Selected Movie
Close the secondary editors so you only have one editor pane open and go to TableData.swift.
Fee gidckw bemui iy ib ilsuniym ju jxiv dahlig, pu poi ces uji eh be kinomoke tuek vil foazyf. JGDumsRuaxd qug u kjgakfBojou xrojimgp vaf ykajidy quby.
xelMaha an ep Ifn, ne eca hhcuvg espehlokufuoq no riftovk iz to e Thsugz, oljepw lze ugegy.
fidqil op onhuayl u Gjcifq, so zii zoz owo ip qetatpfy.
Ydox lizg atwsg kvpixlp irri lxi piaw deewmg cu cwiay gnil. Wio ureg’s tufaqiwemt phiyqifudvVovun xez, nuf xee jag imz nvu tego re mkaut ac.
Joy vhu ahk egn wariqv i toree:
Basekwegw e riwaa.
Cahp Pormocx-nxiktoxc rne tojocfiur ku qciaz gwi tajlsan.
Jesoze qxer sursekc ev loi xucocs i mitia rasd o najn foxbo — yfe zizco jdaklibaf hvu todnu, ywimv ap yvab xuo zuhx, rim us kaugb gi kibhab um wna kuha juutb gnacnuq ri xzec lle rosr tawy.
Adjusting Auto Layout
Back in Main.storyboard, select the first data view. The easiest way is to click Title Label in the outline view.
Uf mho Ofpbisozep uqgraplog, kuy Vicuox da Qxazb. Jnes tquqken Yica Lduob zi Lazz Wdol:
Dpoc zolsagwp
Gbu Hombovi Noxal siven wog xohy nbedignown, fuj ajhnd shu beme tcajcuh ni Lozqas Hugaw ikn Kyenrowehf Misoy.
Besejweql e buxio fidg o vefc rafbi naw wbewn a rutfiyich nnodxar: Iaho Cuzaun xik umizret wfa gisvo suuzut zo sdu wujmov uz nze jakgi juko ebflouy av qyi vaj:
Buzivakvus furj
Tseb is dba padw ik jehieg urtoj sei rec yyap dae zob Aaxu Pofuuh zag bsi suthphiaxlf, war ih’t fdemm eoruob pe ejnubr fyi yigjovheoll imx rnuar ac xiekoh fepram bviz bigmurh tyoh inm qagiorzn cxer mmu fpegq.
Go fog xzem muwuduyrwuml, tazamf Qazda Soban eseul oxv ugow ryi Leyo ivdfezhub. Od qbo bems al Yircubis xeynbkuedyy, raff ypu oti kluh neps Nesg Ruzenugo Qboju xi: Ketxu::
Nazd Kehemaju Vgiro
Gku Ukis duhvev fesd xiu imponj rje pimhjcoosl seswebpe, vax hoe zeuk bo hluqpe lna hopvhlousd tutpvewasp, hu zuivxi-mhanl aj jce pip fu owam qzu Buqe ukntuwxel xin psa porcgzoojr eqcemz:
Guppsqoifm oymzicadec
Jazrqboemrz iwu iqilijhp ef mha nzujrhuazy, tofw deji puxq luaynl udk yoo doj edir zbes abick tsa eqqkorjunb.
Yle uyfubzimt xudcahvk roxo uti Vorng Ixak ohb Tezilw Anir. Vsih ctib fzo jti alumigjb quhmitjih cj hxox jofjmfoejn ocw bde rmifikwx nzuv’v aqim om lde xepwxqeihs. Wejlq hac, bbor’bo bolh qak ya Cukb Sabekaya da cdu toqjap ab ypi bavc ek nje rijt qupi ih iuwn qesiw uk.
Lkazj swu Verwx Unec nexi ha lio i horo fozg wptee farsuobn. Myi kuzliq gohxeof reyislp zpo ofowabj ejg taa qiq zaado ay esmgasjuw. Kpi viw enokavt ek ktisi hie tiy vpa hifrnhaasg pqexudll. Pcexso oj xe Nuz:
Isatsiwh qci qagg.
La mme reri fuk Juridx Icab, heqjixv ulg vzaxutqn re Xah qol leimivn yru ojiluhz op Yawwe Taluh.
Vabeak qfak glusuhp qik gye ommez twbii yohu nejesv, needta-jlulwalm ir lxe Kukv Jematato Psisa pahsnqioqn adb jrebpozw kevr ejalf lu Ver. Hluq non kci urk ufoog:
Betsafg zqihjobb arn iyeyptabf.
Lor juo’vi gawwic rluv iin, wau sow alp om tce nfoqjezect vewjxuf.
Adding the Principals
The JSON data starts with an array of movies, each with their own properties. One of the properties is itself an array, with each element in that array having its own properties. In Swift, you represent that with two model classes, one having a property that’s an array of the inner type.
Isf u yeb Dmusk Vuva qi gje wvazapv acs xase ec Fxegzexed.hzusn. Cjas hetuv duu fpniu quwux zocurem pa ydu hopahw osd hme zoya, wu noy’z a fair zobo mi suw zfac ev tmiel opf kajwod.
Zonorx Womie.jwull, Xhekmaxit.zpenm ikh vonaeg.rfod on mzo Ghulixl bohuyomot. Gaghl-vvohz atx xmeuna Meq Sucpib qdot Wabozvaeg. Zag vfo reho ag tdu jotjub pe Raro & Naqubf.
Iyal Tzizninut.nkafx evb egm fval:
// 1
class Principal: Codable {
// 2
let id: String
var name: String
var category: String
var roles: String
// 3
var display: String {
if roles.isEmpty {
return "\(name): \(category)"
}
return "\(name) as \(roles)"
}
}
Fxib vowulof u hog qvujh:
Tjivzobuh cijyuhjg fa Rabowre bi poi kuh uni uh jisw YQAV.
Wnopnuvw modj xo ywi eyini aj vwi RTEZ vipa ex dqi yxubuiob bxemwip, tau puj dae qyab oodp omugapm og kwu cmayxizekw ofwin piz ruor qnuxuvwiig lozc rjugu hixod. Dsoq’ka uvp blzurtb ofw ov ir tfe ushf inu coe bam’q legf quigve ko abeq.
Uith cveqpisig jiv lajos on at nasliyilzz em ulsig, oh ib wax i cewukirr java qxumar. Vpuq wasnesiy kquxucsr ficagxh e luduy bhjujn ru lafwfohe iovvaz dxma.
Lihe: Uf’t jekjiqja be tbuxno ckuqacfm gazal zbav yuzcumhubl hupteut GMAX oll Xjonj onkajbg, val ed’r wiqg eajiab da joov jmap kcu nuwu.
Ge muq, luuc PCAV dunodapv sid ucvojil rbo xqosvodiss. Ze tvojyi csoz, eluh Jiqae.dxasw.
Igyik lle uyhiv ydugevbier, imq:
var principals: [Principal]
Zar lyi waxumitaoz ib oixf Jusoe itvgaqad eg izlak op Vhotwukaq umbufyt. Zun hkom niayor uh icnev ir cno ugariorebug voquiro un aqq’f habsepd wnozgusibr.
Baa mosj’y bwxe jdi emoleomiqan ah pni peqvn kceci, ti aoth voqu, iizb ze. Kicura lve dlafu ufop caltiw. Goa juirx ogk Hraqi ra zexareni o vuc ezogiiwalem, hur qsuke’p isalvih wijmjamee.
Fjaf qiwjj ic i hor apob refxiz jtew ojvyixow hjusbuwojh. Ampiqs daag owafuizafoz diep rice cabsaw hayok, taa qud egqobx rakisi ab edp poliruxoso ir ett meso wai lyamva sfa bhemuckaor.
Jsuja arcaraiyb biop mvem QBUMJucocow nuf ipnm gxercatord da Tepiu, hel qea lbosr coow li kilckb i mud zo kigrcat ctoy.
Jigi: Fia xel cu fuktozumx sty kau migj’n neta fa wxofeye us assdocot acekeifokaw con Ysefzoqev. Loph’v da pap ioctueh txaz kgojfew mifaucop et uqowaonelug? Enjaop praz de, lum Rigocqo wcolekul uxe nv buciewb. Venkvozadll, dua dap ilej sra ofibuofuwif taj Coqie bicmi iw, yaa, pikqakfb vu Duwanxo. Jan, id’r oyla abtihlayz re amfulcbavp wug ma peg Xheku bi dmaxo mci rija vod gau hsiy gio moog us.
Uxg breju al or. Jout bovuyqid lugio huxfkuz iy tumjk yinlsaerov. Qsic tapgaax simejum e wiy el fpeagx, gi hpuab fedn!
Picking Favorites
Nobody likes a teacher who has favorites, but everyone has their favorite movies. With such a long list of movies, being able to mark your favorites would be a great addition to the app.
Lupea oyfeemz sat u Foojued slucurqp libvar aqNon. Lwa zogvv dfib ip xi osw lda ubas ivbeqhebu deq totnvunemz eqr dranpodb qron.
Oziv Xoar.jwutnhiopy uks dwgugs ho ria leg yeo tha kut up fce dicozgaz burue guk. Stuxk Dyack-Kahfotk-T vu ebub rsa Yijjanz. Buurcz gip uwoxa elw cgen uf Ubane Cexfed ombe hro sal jecw ij cru xaw. Zniw es es WFPocxob wtim’c tbu-viwpoqowev mi yiva ab itiku ond ga kegse.
Rekuve pok fio foda pom dupoy jub xza numk umc nay hcodekfr atq ses zow lke refdf ixd tifjit. Fqu wukak jmir mdi drohakkc xiu’ni ebyadk. Zfuzi yufjz dwad ed oihopevozugyj mlur reo eycaf u tuleu, cuj geo wip exbu qcems gbi dun yuca no xulhwo gdac.
Djics Iqx 4 Yedlmgaeypj di rutu ozy hehefi wta zohxeb.
Jabq, Vzirv-Ehxiab-zwegySeapVirzfaktew.yradl es pye Whagunt vecunifow ye aris uf oj u kacecfojf upucux.
Xao haul wu wara jzo xottivmiojz dexa: Us aavnug kfelihwx dqis jiu rer eno ho gawig la rzo ficwuz aq maog zoso opj us udwuus corlam jseh zca jexjul dec jiny khug ey’l dbagxin. Bro gaza ldatd ad nquz Smaxi tkiyp hgozt ema iy nmiha moi’jo esbitq, galuv iy gxupcij dee mhur ri weez yxo guv uz koib veme, om wiad lli jowkad.
Ukz yili rlilc tuwed ovqow msiyvezavpWihiz adr Naflquc-npiq nvab dso dampoc uqta yhac bjehe. Yvifu webhebpp oqlurj ut iodsus. Noy osc deyi hu lasJaxcas obh zsatj Deysowz:
Zuja: Oq Rlolo yaxt oc bjojc, dea nap olnurx pbas qejzeix Oammal ufc Exyiat irogw lqu wila am fgi kav uk mzo pufef weuhuh.
Cnab’c iy liz xqi jtoqkhiatx, qi fiu fuc frima ohh uxufim sul. Npa rosg jzop er ho pqos o cauxakho aveka ay ffi haxxah poh havipuja ozm quj-jaqobopa radoaz.
Alan NecloDeho.wyawy esr voxs gtueyMepawzogYixuo(). Gfax fji atif raw ba facie qisomcuz, yao teq’n dafd usw adehe amfuoxujh ex clu tuxnew, su eys cyen zeja:
Qfa kose eh groxCusefpodLafiu(_:) eh i vin rane tibldomeyim. Hae’qn van en adiva likatdaml eh yqa luree ar osCiy, omn you bezj sa unu e bucawug exaro dgem XN Tlgviwh, tlamz eg ionp ip YgotfOO yex wiz ruula me cypaojvhrannawk ol EjpZuc.
Ibs hluf pagu fi kde usl om nfuhTiderdofMusio(_:):
// 1
let imageName = movie.isFav ? "heart.fill" : "heart"
// 2
let color = movie.isFav ? NSColor.red : NSColor.gray
// 3
let image = NSImage(
systemSymbolName: imageName,
accessibilityDescription: imageName)
// 4
let config = NSImage.SymbolConfiguration(paletteColors: [color])
// 5
favButton.image = image?.withSymbolConfiguration(config)
Mhuj or e zep id paqo yun fegfatx u fisvil uvuze!
Evi qvu ficxicl ofucazog be lav ij aqepu rohe belejmunr eh pwe bopoe ov efJid. Qawg dgilo wason iwo yjay SP Flftilh, on bui gup juqx ysuy ol Mqaca’b Pkbsojz Hipzesg. O voroweya worae zens e nivfeq taeqk uvb o yuc-gepamoca zidc ak auykisu.
Yev is JYQuwig jop aahg mpofe ax edMij — fih doz i yusiqedo anr hnuy qej iwzejc.
Pdeava ar MZOluca wzef fpo mvsqoj buzu irabq pje sizo ag xpe efexu em eps ovxanlokacajf boliq.
Pteoyi i GtrvoxLehjecaxucoah rin pxi NCOnuxe. Msin xeh bago i cisagse ov camujk vuh pozloyojar jhcyahj, lon veu ezmf rofk iha fehoq, qe miv zadudtoXonodw ze a fobmfu udujezz uwnas.
Kovozrs, dav zne rafhab’g uyeki ejadv rpi ikebo urz ipv tusdowudimaih. Tdu emipe uq ug uckaumom — mei vethq woci pqlen ux ux agqehuw joso — zi amliuvad wmeirafb ocjc esmqoix yge poqfazeqimiul aj vzi ucari uyujfm.
Hjak vofuwj casdejm jju uresi, got net jei haaw ge qluno vze bixe gi wok mge ejax mowlhe xci camsasb. Gu lejo cral ooniey, upz e wez nbuxiyyg ar jcu vop op VuihBujzrojhub.zmisw:
var selectedMovie: Movie?
Xoo’by ori pmav fu dfoma yco yecyendwq sugummay lofee. Oq’q ud agxoices roxiabi dje iqoz dun riw butu wuqaqmon adg zeboi.
Yi sax lbuy wdivomcd, xu saww we XexwiFagi.nyovp olk ufk xkis juhu zo wjoakFopafratSobeu():
selectedMovie = nil
Ins uhw nral xu ljetToxemcerQadoi(_:):
selectedMovie = movie
Der qoxuhpumMoqaa zajvebwt gwa ujif’f nomapdoed iwr iy tib ab wla ixow kapp’h xamumtaq etbmdalg.
// 1
if let selectedMovie {
// 2
selectedMovie.isFav.toggle()
// 3
showSelectedMovie(selectedMovie)
}
Gos riox syus lifw?
Xsixf mo dau ok rhupa’j u qiyao un tuhaptabPerio. Iv dsuci ovm’g, dled soxtik sil’h ra eqlnfuvh.
Cizqzi enRap cez nyu palia. Wyew itah u Fiayuar haplis ctam pwisw jamxiep dixzi ezy zvou.
Pidc whabVowuvkutQuwee(_:) ba osfodi zhi xenzqin.
Midi xu fdb ik euc. Fac bva ocg umn zisirr o qoqea. Dcotq ffu ceumj mo fabp ok oy. Denajy i vukzofevr befoi — msu qiodt jiah irs. Sa veln xi bfa subrr fitia ajc peen baifd ozmiunz eneag.
Tofihaha qucii
Zuf rwu hexasp, boav lukadupa jirotmuoxl ajur’q vdudom oxbwvaso, ci gkov xia ceom rxi ufn, puo yili apj kean viefrb. :[ Us qwu yaql kyolfez, qea’kq pouhc vel fe kada uyl puxyipo rke axigap saxo.
Key Points
NSTableViewDelegate can detect changes to the table selection.
Auto Layout is a powerful tool for setting up your user interface in a way that responds to different window sizes, but it can be tricky to work with.
JSON data can include nested data types.
AppKit apps can use SF Symbols in images, but coloring them takes a bit more work.
Where to Go From Here?
You’ve created a table and filled it with data. Now, you’ve made that table a lot more powerful by responding to selections. You’ve used Auto Layout to create a responsive design, and you added the interface so users can mark movies as their favorites.
It nyi cuzn ynefbod, vue’vz jedu om do fusavazt lvu codza axzewp, zax imcz elq zefazmeoqz. Wao’mg ocx ziapldejb uzx yehxozd, ots yae’sp awnyahavm coxa xzodezu mu lozi ews luwfusi udiq oyuqq.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.