[Powered by Google Translate] [Seminar] [IOS: Skryf Apps soos 'n baas] [Tommy MacWilliam] [Harvard Universiteit] [Hierdie is CS50.] [CS50.TV] Alle reg, almal, welkom by IOS: Skryf Apps soos 'n baas. Hierdie seminaar is gaan om te fokus op die skryf van programme vir die iPhone en op sy beurt die skryf van programme vir die iPad, en so het ons basies gaan om te loop deur 'n paar verskillende voorbeelde van hoe om 'n app te maak, 'n eenvoudige spel soos Tic Tac Toe, of as jy meer belangstel in die maak van 'n app soos 'n soort van nuus-leser of iets wat in wisselwerking met die Internet wat ek sal praat oor wat as goed. Hier is ons kort agenda. IOS apps is geskryf in 'n taal, die sogenaamde Objective-C, en so dit is 'n bietjie soortgelyk aan C, maar nie regtig op alle, so sal ons praat 'n bietjie oor die taal self en dan hoe iPhone apps te bou met behulp van hierdie inligting program genaamd Xcode, wat, indien jy dit nog nie afgelaai nog voel vry om die aflaai te begin nou. Dit is n paar gigagrepe. Dit moet vry wees op die App Store, sodat jy nodig het om 'n Mac te hê ideaal loop van die nuutste weergawe van OS X. As jy nie, geen probleem. Ons het Macs in die wetenskap sentrum beskikbaar vir u gebruik met Xcode geïnstalleer is, en so voel vry om diegene te gebruik vir ontwikkeling. As jy wil om 'n app te maak, maar het nie 'n Mac, moenie worry nie. Daar is baie van kampus hulpbronne vir daardie. En so dan gaan ons te dek 2 groter voorbeelde van verskillende apps wat jy kan maak. Objective-C is tegnies wat genoem word 'n super stel van C. Dit beteken dat 'n C-kode is ook geldig Objective-C-kode. Dit beteken dat ons soort buis op band opgeneem op 'n paar ekstra funksies te C. Sommige van hierdie eienskappe sluit nie om ooit weer skryf malloc, dank God, nie hoef te bekommer oor daardie dom wenke en bevry hulle en al daardie dinge jy haat oor C, en dit is soort van weg in Objective-C. Nou, Objective-C het ook 'n baie groter standaard biblioteek, so daar is 'n baie meer funksies wat jy kry gratis binnekant van Objective-C. Onthou wanneer ons skryf PHP het ons opgemerk dat ons het van die kleinste taal aan die reuse biblioteek van al hierdie gek dinge wat jy kan doen. Dieselfde ding gebeur in IOS. Daar is voorwerpe vir dinge soos die Boeddhistiese kalender, en regtig iets kan jy dalk dink waarskynlik bestaan ​​reeds in Objective-C se implementering. Die objektiewe deel van Objective-C verwysingstegnieke iets objek-georiënteerde programmering genoem. Dit is 'n soort van 'n nuwe konsep, maar ons het eintlik meestal geleer 'n baie van hierdie konsepte reeds. Die idee agter objek-georiënteerde programmeringsvaardighede is dat jy gaan om te struktureer 'n baie van jou kode om hierdie dinge genoem klasse, en hierdie klasse is regtig structs verheerlik. Binnekant van 'n struct ons basies gesê hier is 'n ding, en hierdie ding kan lede hê. Byvoorbeeld, kan 'n nodus in 'n geskakelde lys het ander dinge soos 'n waarde, 'n wyser na die volgende nodus in die lys, en saam dat pointer en dat die waarde gekomponeer hierdie een geval van 'n struct. Klasse is baie soortgelyk, behalwe klasse kan ook funksies binnekant van hulle. Wanneer ons 'n struct verklaar, kan ons net sê int N of node * volgende. Objective-C kan ons eintlik sit funksies binnekant van daardie dinge. Nog 'n ding wat klasse kan doen is om hulle data uit ander klasse kan beërwe. Byvoorbeeld, sal ons kyk na 'n klomp van die ingeboude in Objective-C klasse. Een van hulle kon die klas wat verteenwoordig die oog vir 'n skerm, en so deur te sê ek wil my eie siening te implementeer ons basies sê iemand oor by Apple, waarskynlik regtig nice mense, hierdie klas vir my geskryf het, en dit hanteer dinge soos vertoon knoppies of die lewering van die skerm, en sou ons dit baie angs al die funksies om onsself te voer, en so deur eenvoudig erfgename van data wat ons kan sê alles wat jy gedoen het in daardie klas Ek wil ook binnekant van my klas, en dan gaan ek n paar ander dinge om te doen, naamlik 'n program te implementeer. Dit is wat die woord erfenis beteken. Ons sal sien 'n meer konkrete voorbeeld. En laastens, die sleutel met objek-georiënteerde programmeringsvaardighede is dat dit lei tot data inkapseling. In sommige van ons probleem sit, kan ons hierdie groot, globale veranderlikes en globals oral, en dit is hoe ons wil track hou van die staat. Ons kan begin met klasse vat inligting binnekant van 'n voorwerp. As ons 'n skerm op ons app, doen ons nie regtig nodig om enige data te hê nog 'n skerm in ons app binnekant van daardie, en so deur dinge in klasse te vat dit lei eintlik na 'n baie beter kode ontwerp, en dit is moontlik met 'n paar van die bykomende funksies Objective-C. , Sal die sintaks vir Objective-C is Forewarning piesangs. Dit is soos niks wat ons nog nooit gesien, so dit is 'n bietjie van 'n leerkurwe om gewoond te raak wat die heck beteken dit? Maar sodra jy verby dat die aanvanklike leerkurwe dit is regtig, regtig gladde om te begin skryf apps. 'N klas te verklaar, om hier te sê, is my klas nie, dit bestaan, en miskien hier is 'n paar dinge wat ek gaan later te definieer, Ek gaan @ koppelvlak om te sê. Ek gaan @ koppelvlak om te sê. Ek gaan na my klas 'n naam gee. En dan later iewers anders gaan ek @ einde om te sê, en alles wat daar tussen die @ koppelvlak en die @ einde gaan my klas te wees. Wat gaan om te wees wat binne in ons h lêers. Net soos in C ons h lêers. Basies gesê hier is 'n paar dinge wat sal bestaan. Ek is nie noodwendig wat jy vertel wat hulle nog doen, maar die vertaler nodig om te weet dat hulle bestaan. Later binnekant van ons m lêers want m vir Objective-C is waar ons eintlik gaan om te definieer wat hierdie klasse doen. Baie soos ons c lêers, het ons 'n implementeringsplan vir funksies. Binne van ons m lêer wat ons hier gaan sê is wat al die funksies binnekant van my klas wat hulle almal doen. En laastens, binnekant van 'n struct ons kan binne sê van daardie kode tussen krulhakies int n of node * volgende, en in Objective-C gaan ons gebruik maak van die term @ eiendom, en dit is wat gaan om die eienskappe te definieer, of die nie-funksies wat is 'n deel van my klasse. Funksies aan te roep in Objective-C is ook piesangs. Wanneer ons funksies in C verklaar ons het iets gesê soos int foo en oop hakie en dan het dit 'n lys van argumente. Dit is wat verklaar metodes of funksies lyk in Objective-C. As ek wil 'n funksie of 'n metode te verklaar waar ek sê metode is regtig net 'n funksie wat 'n lid van 'n klas is, so 'n soort van verwissel, maar nie regtig, binnekant van my metode Ek wil 'n nuwe metode te skep. Dit gaan niks om terug te keer, so dit gaan te wees van die tipe leemte. Dit is die terugkeer tipe van my funksie. Nou het ons parens hier omdat ek weet nie. Volgende gaan na die naam van my funksie, en dan uiteindelik het ons 'n kommapunt net soos ons gehad het in C. Wat is nuut hier is hierdie man hier. Hierdie koppelteken is eintlik nodig is, en wat dit sê, is dat hierdie metode hier op 'n geval van 'n klas moet genoem word. Nadat ons verklaar ons structs waarskynlik iets gesê soos struct node n, en wat eintlik geskep of aangehaal een van daardie structs sodat ek kon eintlik begin werk wat is binnekant van dit, so hierdie streep beteken dat ons moet instansieer die klas net soos ons aangehaal dat struct voordat ons kan noem hierdie metode op dit. As ek wil om te begin byvoeg argumente te my metodes raak dit selfs meer piesangs. Hier is die naam van my metode. Dan gaan ek 'n dubbelpunt te hê, en na hierdie kolon dit sê hier kom n paar argumente. Hierdie metode neem een ​​argument. Die tipe van sy argument is 'n int, en die naam van daardie argument of die veranderlike wat ek gaan om te begin met behulp van die binnekant van die metode genoem word i. Weereens, hierdie is 'n metode. Dit neem 'n argument. As jy wil begin toe te voeg meer argumente raak dit meer piesangs in die sin dat ons hierdie kolon wat sê hier kom my lys van argumente. Die eerste argument is 'n heelgetal. Nou, hierdie tweede argument is interessant. Die veranderlike wat ek gaan om te word binne deur middel van my funksie word genoem f, so binnekant van my funksie wat ek kan sê f + = 1 of iets. Hierdie ding hier is basies 'n sleutel vir daardie argument of parameter. Net soos ons het sleutel waarde pare en iets soos into of assosiatiewe skikkings Objective-C het die besluit gemaak om te sê, okay, net sodat dit is regtig duidelik wanneer jy noem 'n metode wat al hierdie parameters is Ek het eintlik gaan hulle almal te noem. Wanneer jy 'n metode noem, sal jy eintlik sê andFloat, en dan sal jy slaag. Interessant genoeg, is hierdie een nie genoem nie, maar al die ander parameters is, so as ons het 'n 3de argument wat ek kan sê andFloat en 'n ander float en so aan. Toe ek hierdie metodes noem dit natuurlik piesangs, so as ek 'n voorwerp, en ek 'n metode met die naam foo gedefinieer, en ek wil om dit te noem, eerder as om te sê foo oop / naby parens Ek gaan 'n bracket oop te maak. Hier is die naam van my metode. Ek gaan die bracket te sluit, en dit is die voorwerp Ek noem dit op. Onthou, almal van hierdie metodes bestaan ​​binne klasse omdat klasse metodes gedefinieer binnekant van hulle kan hê. Hier het ek na willekeur 'n voorwerp van 'n paar klas, en dit is die sintaksis vir om dit te doen. Daar is 2 stappe tot die skep van 'n voorwerp. Die eerste stap is om te sê ek wil ruimte toe te ken. Dit is die ekwivalent van 'n malloc. Ons het nie 'malloc meer te sê. Ons laat val die m, het dit alloc, en vervang die c. M. Nadat ons alloc iets het ons dan nodig het om dit te inisialiseer. Basies as jy voorwerpe te skep wat jy wil dalk 'n paar logika te hê wat voer wanneer hulle geskep is, sodat jy kan slaag in 'n paar verstek waardes of iets soos dit, en so hierdie init metode is wat eintlik die voorwerp skep. Ons het eers die toekenning van ruimte, net soos ons gedoen het in C, en dan het ons inisialiseer, wat mag of nie mag doen nie 'n hele klomp. Dan het ons hierdie ding terug in 'n voorwerp o. Daar is 'n ster hier, want dit is tegnies 'n wyser, maar moenie worry nie, wysers is nie so 'n groot deal in Objective-C nie. Nou het ons geïnstansieer hierdie klas met die naam NSObject, en dit is net 'n ewekansige klas wat Apple het. Ons het aangehaal, en nou het ek 'n voorbeeld van hierdie klas in hierdie voorwerp o, so dit beteken dat as ek gedefinieer hierdie metodes het ek hulle so kan noem. Net so, as ek wou om 'n metode te roep met een argument, so dit is die bar metode, neem een ​​argument, en hier is die Baz: qux metode, so dit neem 2 argumente. Dit roep een funksie op hierdie item o. Sin maak? Die sintaks moet sin maak, maar jy soort van gewoond raak aan dit. Goed, kom ons praat oor 'n paar dinge wat gebou is in Objective-C wat nie noodwendig in C. gebou In C ons soort van het om te gaan met stringe as hierdie dom karakter skikkings, en dit het regtig irriterende. Objective-C het dié gebou in vir ons, en dit is gebou in die gebruik van hierdie klas met die naam NSString. Wanneer ek wil 'n NSString ons het meer arcane sintaksis te skep. Eerder as om te sê "cs50" ons sê @ "cs50" en dit is net die sintaksis vir die verklaring van snare in Objective-C. Dit is baie maklik om te vergeet nie, so moenie. Nou, wanneer ek het dit, dit is 'n string nie, maar let dit is regtig net 'n voorwerp. Ek het gesê NSString, wat beteken dat ek geïnstansieer die klas genoem NSString, wat iemand anders geskryf het vir my, en hulle was baie lekker daaroor, en so nou Ek kan begin bel metodes op dit. As ek roep die metode lengte op hierdie item s dit gaan om terug te keer na my die lengte van die string. Dit is net soos strlen in C. Dit sou terugkeer 4. Net so is, 'n ander metode wat ek dalk wil om te bekommer oor hierdie characterAtIndex. Dit is 'n metode wat sê dat op hierdie string s Ek wil hê dat jy die nulde karakter te kry, en so sal dit terugkeer na my die karakter c, en daar is 'n hele klomp meer van hierdie metodes wat jy kan regtig maklik Google. Apple se dokumentasie is groot, en ons neem 'n blik op wat in 'n bietjie. Dit is strings. Ons het ook veranderlike grootte skikkings gebou. Onthou in C toe ons 'n skikking verklaar ons het om te sê jy het 5 elemente, die einde van die storie. Toe ons by JavaScript en PHP kan ons begin om dinge te doen soos om elemente of bewegende dele. Ons kan dit doen dieselfde in Objective-C. Skep eerder as om 'n skikking in die normale C manier Ons het weer ander klas genoem NSMutableArray. Daar is ook NSArray, en dit gaan basies kapselt sommige skikking. Dit sê die eerste ding wat ek wil doen, is ek wil toeken ruimte vir 'n nuwe skikking, en nadat ek toewys Ek dan nodig om dit te inisialiseer. Weer, net die roeping van hierdie 2 metodes. Nou dit beteken dat die binnekant van hierdie voorwerp 'n Ek het 'n leë skikking sit daar. As ek iets wil byvoeg by hierdie skikking, kan ek noem die addObject metode. Ek wil 'n voorwerp te voeg aan die skikking 'n, en ek wil die tou CS50 te voeg. As ek wou omgekeerd verwyder wat ek kan sê wat ek wil verwyder die voorwerp in die eerste plek op die skikking of beswaar. Sin maak? Goed, jy het soort van gewoond raak aan hierdie vierkante bracket ding. By the way, binnekant van 'n baie van Apple se biblioteke sal jy sien hierdie NS. Die NS staan ​​eintlik vir die volgende stap, wat was een van Steve Jobs eerste maatskappye, en dit is waar hy werklik begin met die skryf van 'n baie van die kode as soort van die basis vir Mac OS X en al die ander dinge, en so die NS is soort van hierdie pragtige nalatenskap skreeu uit na een van die vroegste maatskappye terug wanneer Apple die eerste keer begin. Dit is oral. Kom ons neem 'n blik op 'n meer holistiese Objective-C voorbeeld. Hier is ek binnekant van Xcode. Om hier te kom, het ek die eerste van die App Store afgelaai Xcode, het dit oopgemaak het, en dan het ek hier na lêer, hier nuwe, en dan projek. Nadat ek doen, dat ek al hierdie opsies van wat ek wil hê om te skep, en so sal ons 'n blik op hierdie opsies later, maar net vir hierdie voorbeeld, want ons is eintlik nie van plan om 'n app nog, Ek het gekom hier, en ek het gesê Command Line Tool, en dit is 'n app wat ek kon loop op die command line net soos ons het is die loop van C. Dit is hoe ek hierdie projek geskep, en so nou is ek hier, se eerste blik op hierdie lêer so laat, en dit behoort redelik vertroud lyk. Ek het 'n 'n int naam. Daar is my vriend argc, my ander buddy bevat SPASIES. En so kan ons sien dat dit is die beginpunt vir my eerste Objective-C aansoek. Hier kan ons ignoreer dit vir nou. Dit is basies 'n paar geheue bestuur dinge wat jy wil nie regtig ooit sal hê om oor bekommerd te wees nie. Kom ons kyk na hierdie eerste blokkie hier. Die eerste lyn, as ek sê Student * alice = [[Student alloc] init] wat is dit doen? Die eerste student hier, is dit waarskynlik 'n klas. Dit is nie 'n klas dat Apple geskryf het, maar dit is 'n klas wat ek geskryf het. Die eerste ding wat ek wil doen, wil ek ruimte vir 'n nuwe student toe te ken, en dan wil ek dit te inisialiseer, so dit gee my terug hierdie nuwe student voorwerp, en ek stoor dit in 'n veranderlike genaamd Alice. Waar het daardie klas vandaan? Wel, hier aan die linkerkant is al die verskillende lêers binnekant van my projek. Ons kan hier sien dat Ek het 'n Student.h en 'n Student.m. Die H-lêer, onthou, is waar ek verklaar al die dinge wat sal bestaan ​​in die klas. Kom ons neem 'n blik op dit. Goed, hier het ons hierdie @ koppelvlak, en dit sê wat hier kom die verklarings van alles wat binne-in my klas sal bestaan. Dan het ek 'n dubbelpunt. Dan het ek hierdie NSObject ding. Hierdie kolon te kenne dat erfdeel bietjie ons was 'n bietjie vroeër bespreek. Dit sê alles wat 'n NSObject kan doen waar NSObject is hierdie klas wat deur iemand anders geskryf is, alles hierdie NSObject kan doen Ek wil in staat wees om dit te doen. Deur te sê: NSObject wat beteken dat ek basies geërf van die funksies van 'n ander klas. Wat werklik het my 'n hele klomp van verskillende metodes en eienskappe wat ek kan gebruik. Down hier is ek 2 eiendomme te skep. Dit beteken dat my student, as dit was 'n struct, sou hierdie die 2 dinge binnekant van my struct, sodat elke student het 'n naam wat is 'n string, en 'n student ook 'n graad, wat is 'n int. Ten slotte, hier neer Ek gaan 'n metode vir my student te skep. Ek het my metode, initWithName, en dit neem een ​​argument, en dat die argument is 'n tou, en ek noem dit noem. Nou laat ons kyk na hoe ons eintlik hierdie klas geïmplementeer. Hier, nou is ek binnekant van my m-lêer. m vir implementering, dink ek. Ek het my implementering, my einde, en dit is hier waar ek eintlik die definisie van watter initWithName nie. Ek het initWithName, die naam van my parameter, en dan is dit is waar ek eintlik 'n student te skep, en so dit is 'n bietjie kripties, maar dit is 'n soort van boiler wat jy wil in te sluit in jou vervaardigerskampioenskap. Hierdie inisialisering funksie hier initWithName, is 'n tipe van die constructor. Jy basies die bou van 'n nuwe student voorwerp en miskien die stuur van sommige data binnekant van dit. Die eerste ding wat ek wil doen is ek wil noem init op hierdie super ding. Onthou dat toe ek gesê het terug hier in die h-lêer. dat alles 'n NSObject het 'n student ook. Dit beteken dat wanneer ek 'n student wat ek nodig het om te doen is maak seker dat die NSObject dat ek al dat die data is erfgename van is ook behoorlik geïnisialiseer. Wat ek nodig het om te sê, is hierdie super eintlik gaan om te verwys na die ouer klas dat ek erf uit, so ek wil om seker te maak ek inisialiseer alles wat ek afhangende van voor ek begin probeer om dit te gebruik. Dan as dit geïnisialiseer korrek dit is net soos om te sê as malloc het nie weer null dan kan ek begin met die opstel van 'n paar eienskappe. In JavaScript en PHP het ons hierdie navraag genoem, en dit verwys na die huidige geval van 'n klas. In Objective-C noem ons dit self. Toe ek sê self.name, wat beteken dat die voorwerp Ek het nou net gemaak het toe ek gesê student alloc init, wat gaan my terug te gee 'n voorwerp. Dit beteken dat ek wil die naam van daardie voorwerp te stel alles wat ek net verby. Net soos in C, het ons toegang tot lede met hierdie dot, so self.name sê die naam van die student voorwerp gaan nou alles wat jy net verby. En uiteindelik, kan ek dit terug sodat ek eintlik iets terug te kry. Vrae? Okay, so dit self = super init, Moenie bekommerd wees as jy nie heeltemal die erfdeel dinge verstaan ​​nie. Weet net dat as jy ooit wil jou eie init metode om net doen, en jy sal goed wees om te gaan. Ja >> [Studente]. Wat doen as self gemiddelde? Dit beteken wanneer ons malloc iets wat ons altyd nagegaan word as dit was wat gelyk is aan null en as dit was null, dan is ons opgewonde. Dit is dieselfde ding, omdat indien dit opbrengste null, dan het ons is waarskynlik gaan om te seg skuld as ons begin probeer om dit te manipuleer. Dit is ons student klas. Dit beteken dat ons ons studente kan inisialiseer in een van twee maniere. As ek sê student alloc init ek nie met behulp van die metode wat ek net geskryf, en in plaas daarvan het ek kan net sê alice.name, en nou gaan ek daardie eiendom naam in te stel. Net so, as ek wil hê dat initWithName metode te gebruik Ek kan net sê alloc, en dan eerder as sê init Ek gaan dat die metode wat ek nou net gemaak het, te roep, en ek gaan om te slaag in Bob. Op hierdie punt, hierdie voorwerp Bob het 'n naam gelyk aan Bob. Okay, hier neer ek NSMutableArray wat ons verwag het vroeër gebruik. Ek toekenning space.Then ek die inisialisering van 'n nuwe skikking. Ek gaan 2 dinge by te voeg. Hierdie skikking hou nou student voorwerpe. Let op dat daar nêrens het ek het om te sê dit is 'n verskeidenheid van studente. Ek het gesê dit is 'n skikking, tydperk. Dan kan ek alles wat binnekant van dit wat ek wil. Hier het ek het 2 voorwerpe. Ten slotte, ek het 'n ander voorwerp hier, hierdie TF. Hier in TF.h basies dieselfde ding. Ek erfgename van NSObject, en op die pad, wanneer jy skep klasse dit is alles vir jou gedoen het, hierdie soort van die koppelvlak boiler. Dit het 'n eiendom van studente. Ek het hier 'n paar metodes wat nie regtig 'n hele klomp te doen, en so dit beteken dat nadat ek hierdie TF voorwerp Ek kan hierdie metode graad op dit noem soos hierdie. Enige vrae oor Objective-C sintaksis voordat ons begin beweeg in 'n paar meer interessante apps ontwikkeling stuff? Okay, so laat ons eintlik 'n iPhone app. Die kern klasse wat jy binne sal word deur gebruik te maak van jou iPhone app oog controllers genoem, en 'n oog kontroleerder verteenwoordig basies 'n enkele skerm binnekant van jou jeug, so as ek op die musiek app, byvoorbeeld, een oog kontroleerder kan verteenwoordig die mening wat ek sien al die liedjies op my iPhone. N ander siening kontroleerder kan wees wanneer ek op 'n lied en begin speel of as ek boor af in kunstenaars. Elk van daardie verskillende skerms kan voorgestel word as 'n ander siening kontroleerder, en 'n oog kontroleerder is regtig net 'n klas wat sê hoe hierdie skerm werk. Dinge binnekant van 'n oog kontroleerder, ons gaan om eienskappe te hê, so gaan dinge soos 'n knoppie op 'n eiendom van ons siening kontroleerder. Ons gaan ook metodes te hê, en dit is basies geval hanteerders. Hierdie metode sê wanneer jy druk die knoppie Ek wil om iets te doen, en uiteindelik, weer, ons gaan om te word deur gebruik te maak van hierdie self navraag om toegang te verkry tot die huidige geval. Koppelvlakke te bou in IOS is regtig, regtig maklik. Hulle het hierdie mooi sleep en koppelvlak genoem Interface Bouwer, en die 2 kernbegrippe wat draad up jou Objective-C Interface Bouwer is IBOutlet en IBAction. 'N IBOutlet sê eenvoudig dat as jy verklaar 'n eiendom wat 'n knoppie, en jy wil dit te haak tot iets in jou werklike UI, jy gaan om te sê dit is 'n uitlaat. Net so, as jy wil 'n event handler te verteenwoordig dan is jy gaan om te sê dit is 'n aksie. Om werklik te bedraad hierdie grafiese voorstelling en jou kode is dit is regtig, regtig eenvoudig. As jy wil 'n IBOutlet aan te heg, al wat jy hoef te doen, is jy beheer kliek, en ons sal sien 'n voorbeeld van hierdie regtig vinnig. Jy het die beheer Kliek op die plek waar dit sê View Controller. Jy gaan in die koppelvlak te sleep, of omgekeerd, as jy wil om te haak tot 'n event handler jy gaan om te sleep van die koppelvlak in die ander rigting. Kom ons neem 'n blik op 'n baie eenvoudige IOS voorbeeld. Kom ons skep 'n nuwe projek. Ek gaan om te kom hier na Toepassing en ek gaan Single View Aansoek te kliek. Ek gaan om te kliek Volgende. Ek sal my projek 'n naam gee. Ek sal dit noem Hello. Interessant genoeg, het Apple veronderstel jy is die skep van 'n produk sodat jy kan dit verkoop en hulle kan geld maak. Down hier ek gaan om te sê dat hierdie is 'n iPhone app. Jy kan 'n iPad app skep, of as jy wil een van daardie programme te skep wat ondersteuning bied vir beide toestelle kan jy dit ook doen. Dit is wat jy wil hê jou regmerkies te lyk. Jy wil storieborde te gebruik, wat ons later sal sien, en jy beslis wil outomatiese verwysing tel te gebruik, wat is 'n mooi eienskap wat jou verhinder om te sê malloc en gratis. Tensy jy wil bel malloc en vry, sou ek hierdie afgegeven verlaat. Ek sal Klik op Volgende en laastens, dit gaan om my te vra waar ek wil om dit te red. Ek sal tref skep, en hier gaan ons. Ek het 'n nuwe projek. Hier aan die linkerkant is al die lêers wat is binnekant van my projek, en let op dat ek 'n hele klomp, en ek het nie eens iets te doen. IOS is 'n groot. Byvoorbeeld, hier ViewController.h, dit gaan my eerste siening kontroleerder te stel, sodat die eerste skerm binnekant van my app. Nou weet ons wat dit sê. Ons sê dat ek hierdie klas ViewController ek roep, en 'n ViewController doen alles wat 'n UIViewController doen, en dit, weer, is 'n paar klas dat Apple het geskryf dat 'n baie handige dinge vir ons soos vertoon op die skerm. Hier is waar ek kan eintlik begin met die definisie van wat my oog kontroleerder, en dit blyk dat ek regtig nodig het nie enige van hierdie. Dit is boiler-kode dat Apple gee my vir gratis. Ek het nodig dat die eerste reël, of Ek het nie 'n klas, sodat ons kan ontslae raak van daardie en ontslae te raak van hierdie. Okay, so dit is my leë skerm. Laat ons nou op hierdie MainStoryboard.storyboard, en dit is waar dit begin nou regtig interessant raak. Dit verteenwoordig die eerste skerm op my app. As ek wil 'n knoppie by te voeg in die HTML-Ek het 'n knoppie tag te skep. In Android jy het 'n knoppie tag te skep, maar in IOS as ek net neerdaal hier aan die onderkant regs en as ek kliek op hierdie 3de een hier waar dit sê voorwerpe, en ek kan scroll down of ek kan begin soek vir die knoppie. En kyk, 'n knoppie, so as ek eintlik sleep en drop hierdie reg daar, Ek het net 'n knoppie om hierdie skerm op my app. As ek wil die teks te verander, kan ek dit dubbel kliek, sê iets soos "aanlok Druk My." Okay, nou as ek loop hierdie inligting, sodat ons stel dit, so om dit uit te voer Ek kliek op die afspeel knoppie in die boonste linker, en daar is my app. Ek het nie iets te doen, en ek het 'n soet op soek na iPhone app. As ek wil om dit te stop, kan jy kliek op die stop knoppie want dit is meer pret. Kom ons sê dat ek eintlik wil iets om te gebeur wanneer ek druk die knoppie. Om dit te doen wat ek nodig het om te doen, is wat ek nodig het om te skep 'n nuwe event handler of 'n aksie. Dit beteken dat ek nodig het om te skep 'n metode wat ek wil genoem word toe ek die knoppie druk, so laat ons skep 'n nuwe metode. Ek is binnekant van ViewController.h. Ek nodig het om te sê dat 'n metode bestaan. Ek het 'n koppelteken eerste omdat ek gaan roep dit op die oog kontroleerder. Ek nodig het om te gee dit 'n tipe. Die soort van hierdie gaan dat IBAction ding wat ons vroeër gesien het. Dit is 'n event handler, so dit gaan 'n IBAction om terug te keer, en dit is 'n wenk te Xcode om te sê dat dit is iets wat ek wil iets te bedraad. Ek kan gee dit 'n naam, soos buttonPressed, kommapunt. Nou het ek 'n nuwe metode binnekant van my klas verklaar. Ek het gesê dat hierdie metode het om te bestaan. Nou laat kom in ViewController.m, en laat ons sê wat hierdie metode kan doen. As ek begin tik, byvoorbeeld, (void) buttonPressed kennisgewing Xcode is regtig mooi en vir my autocompletes. Dit is regtig wonderlik. Let op dat die binnekant van die m lêer Ek kan ook sê nietig, en dit is omdat dat IBAction is nie eintlik 'n tipe. Dit is eintlik hashtag iewers gedefinieer om 'n leemte te wees, en weer, dit is net 'n wenk te Xcode wat sê Ek wil dit 'n event handler wees, en ons sal sien waarom net 'n tweede. Wanneer hierdie knoppie gedruk word Ek gaan iets irriterende te doen soos vertoon 'n pop-up. Te doen wat ek kan 'n nuwe geval van hierdie klas genoem UIAlertView skep, en dit is 'n klas wat Apple het geskryf dat gaan irriterende "pop-ups te vertoon. Ons sal die pop-up waarskuwing noem, en ek het 2 stappe, onthou, die skep van hierdie item. Die eerste ding wat ek nodig het om te doen, is die toekenning van ruimte. Ek wil 'n UIAlertView. Ek wil ruimte toe te ken. Dit is my eerste metode. My volgende metode is wat ek wil om dit te inisialiseer, en so ek het hierdie groot, lang metode genoem initWithTitle. Dit is basies gaan om te beheer wat hierdie popup sê. Die titel van my popup kan hallo. Die boodskap van hierdie popup kan wees "Dit is IOS." Afgevaardigde ding, ek weet nie wat dit is nie. Kom ons sê dit is niks. Nou is die knoppie wat gaan verskyn kan sê iets soos "dit is verseker," en ek wil nie regtig enige ander knoppies, so laat verwyder en maak die bracket. Okay, ek het 'n ekstra een geskep. Daar gaan ons. Dit is hoe ek kan 'n nuwe pop te skep. As ek wil eintlik toon die popup Ek wil die show metode te roep. Te doen wat ek kan sê waarskuwing en toon, en weer outomaties was super nice. As ek het vergeet wat dit was, as ek net in s getik, Ek kan blaai deur hier om uit te vind wat dit was, en filters mooi. Nou het ek hierdie nuwe pop. Ons sal later terug te kom na wat afgevaardigde beteken, en nou wil ek om te sê dat ek wil jy hierdie metode afgedank word toe ek die knoppie druk, so ek gaan om terug te kom na my storielyn, en ek wil te heg dit IBAction. Die eerste ding wat jy wil doen is kliek op die knoppie. Wanneer ek druk die knoppie Ek wil iets om te gebeur. Ek gaan nie af te hou beheer. Ek gaan om van die knoppie te kliek en sleep hier waar dit sê View Controller. Ons kan sien dat dit mooi steek. As ek laat gaan met my muis Ek het nou hierdie popup hier waar ek het 'n paar opsies. Een van hierdie is die gebeure wat ek kan registreer. Dit is al van die metodes wat ek in my h lêer as IBActions verklaar. Dit is hoe Xcode weet wat moet verskyn in hierdie klein lys, so dit is net 'n wenk. As ek kliek op die knoppie gedruk, ek het nou die event handler geregistreer. In JavaScript ons het om te sê ek het 'n paar kode wat die event handler geregistreer. In Objective-C was dit regtig so maklik nie. As ek loop dit weer nou wanneer ek die knoppie druk my event handler gaan om te brand, en ek gaan die pop-up te kry. Super, super eenvoudige daar. As jy ooit wil al van die gebeure wat geregistreer moet word om te sien op 'n komponent as ek kliek op hierdie knoppie en Ek kom hier aan die regterkant die eerste wat jy hier kan sien ek dinge kan doen soos die tipe van die knoppie, so as jy wil een van wat ek se of die add kontak knoppie of wat ookal. As ek wil al van die gebeure wat op hierdie knoppie om te sien as ek kom al die pad hier na die regte kant ons hier kan sien op die gebeure Ek het al hierdie verskillende gebeurtenisse. Kan ek die knoppie druk, toe ek laat gaan van die knoppie, as ek dubbel tap of wat ook al, en die een wat ek net geregistreer is hierdie gebeurtenis genaamd Touch Up Inside, en dit sê dat sodra my vinger kom die knoppie af daardie geval gaan die vuur, en dit is presies wat nou net gebeur. Dit is 'n soort van die standaard-knoppie gedruk gebeurtenis. Enige vrae tot dusver? Goed, dit is hoe ons kan begin om te bedraad dinge in ons kode in dinge binnekant van ons koppelvlak. Onthou die eerste ding wat ons moes doen, was om die kode te vind, en dan het ons bedraad die koppelvlak na die kode, en daar is ons eerste app. Goed, dit was regtig cool, en ons geskep hierdie knoppie. Wat gebeur as ons nie wil hê om 'n klomp van eiendomme te skep verteenwoordig hierdie knoppies? Byvoorbeeld, in Tic Tac Toe Ek het 9 knoppies, en dit sou wees super, super irriterende te hê om te sleep en 9 keer of as ek moes Tic Tac Toe te maak met 81 in plaas van 9 en ek het 81 keer te sleep en te daal, en dit is lame. Wat kan ons plaas doen, is baie soos 'n HTML wanneer ons dinge soos ID's en name gehad het en ons kan soek vir dinge deur hul ID, daar is 'n soortgelyke idee in IOS tags genoem. 'N tag is eenvoudig 'n unieke numeriese identifiseerder vir 'n komponent. As ek sê dit het 'n merker van 0, byvoorbeeld, as ek 'n knoppie en gee dit 'n merker van 0, en ons sal sien hoe om dit te doen in net 'n tweede, as ek wil hê dat die knoppie te kry, kan ek net sê ek wil om te bel die viewWithTag metode hier op die voorwerp, die self.view, wat verteenwoordig die huidige skerm, byvoorbeeld. As ek noem dat viewWithTag metode, ek gaan om te trek terug die knoppie met tag 0. Kom ons neem 'n blik op hierdie gebou Tic Tac Toe. Eerstens, dit is my storielyn. Ek het hierdie 10 UI knoppies geskep. Let op hulle is almal dieselfde grootte. As ek op een van hulle en ek kom terug hier op die regterkant jy sal sien ek die skrif aangepas reg hier, so ek het die skrif 'n bietjie groter, maar wat ek ook gedoen het was ek hierdie merker. Ek het gesê dat dit 'n tag van 1, en dit is die boonste linkerkantste. Nou, as ek op 'n ander knoppie, soos hierdie tweede een hier, nou sal jy sien dat my tag is 2. Elkeen van hierdie knoppies het net 'n unieke tag, en so is dit hoe later ek gaan om te begin interaksie met my app. Dit is al die binnekant van een siening kontroleerder, maar hier is wat ons het. Ons het 3 eiendomme hier. Die eerste een en die laaste een is die toestand van my raad te verteenwoordig. Basies is hierdie eerste een is 'n skikking waar die XS en Os is. Die ander een vertel ons wie se beurt dit is. Jy sal sien dat ek ook hierdie dinge hier. Voor wanneer ons eiendomme verklaar ons het vir hulle 'n naam en 'n tipe. Ons kan hulle ook 'n paar ekstra inligting hier. Die eerste sê nonatomic, en wat dit sê net een ding is basies ooit sal probeer word om hierdie veranderlike op 'n tyd om toegang te verkry tot. Jy kan doen om meer komplekse toepassings wat multi-threaded, en so terug in die Scratch ons verskillende drade gehad het, en verskillende sprites kan doen verskillende dinge op dieselfde tyd. As dit is nie die geval nie, en dit is nie iets wat ons sal kyk na, as ons sê nonatomic dit eintlik gaan maak dinge 'n bietjie vinniger. Ons het ook hierdie ding genoem assign, sterk of swak. Hierdie toewys sê net dat dit is 'n standaard tipe. Dit is nie 'n voorwerp of 'n wyser, want dit is net 'n Bool, so Bool is gebou in Objective-C. Dit sê nie probeer om enigiets fancy met wysers hier te doen. Dit is 'n gereelde ou scaler. Sterk en swak, swak sê dat eintlik Ek wil om dit te wys word om iets in die oog kontroleerder. Ek gaan nie om werklik te ken of init dit self. Die koppelvlak bouer, toe ek die app hardloop, gaan alles wat inisialisering te hanteer. As ek sê swak, wat sê dat iemand anders gaan word die skep van hierdie. As ek sê 'n sterk, dit sê dat ek gaan die een wees wat wat die skep van hierdie raad voorwerp, en so hier is ek nog 'n aantal metodes, byvoorbeeld, 'n aksie vir wanneer die nuwe spel knoppie gedruk word, 'n aksie vir wanneer enige van die ander knoppies is gedruk, en ensovoorts. Ons sal nie in te veel van die logika van Tic Tac Toe, maar dit is baie opwindend, maar laat ons 'n blik op sommige van die dinge wat ons kan doen binnekant van IOS. Hierdie nuwe spel metode gaan word afgedank wanneer ek die nuwe spel knoppie druk. Te haak dat het ek net te kom na my storielyn. Ek het op 'n nuwe spel. As Ek kom hier aan die regterkant Ek kan sien dat Raak Up Inside is bedraad aan die newGame metode. Dit is waarom dit gaan kry afgevuur. Die newGame metode gaan stel om te doen. Dit gaan om te sê ek wil hê dat jy skoon te maak van die stand van die raad. Dit is 'n mooi metode op wispelturig skikkings. Dit gaan om te sê dit is nou X se beurt, en nou gaan ek voordeel te neem van hierdie viewWithTag ding. Ek weet dat my knoppies die tags 1-9, en dit is iets wat ek na willekeur gekies. As ek wil die teks van elke knoppie te stel om leeg te wees want ek het net begin 'n nuwe spel, en ek wil nie Xs of Os oorbly Ek kan dit doen. Ek kan sê ek wil die oog met die tag, 1, 2, 3, 4 ensovoorts. Dit sal 'n ander knoppie trek elke keer. Hier is ek gaan dit te gooi UIButton. Net soos ons kan gooi ints te dryf en vice versa dit sê wat ek wil om dit te gooi na 'n UIButton. Dit beteken dat die tipe van 'n UIButton * as gevolg van wysers, maar moenie worry nie, hulle is nie scary nie. Sodra ek hierdie knoppie Ek gaan 'n metode om 'n beroep op dit. Hierdie metode word genoem setTitle forState, en so dit sê Ek wil die teks van die knoppie in te stel na die leë string wees, en ek wil dit na die leë string wanneer dit nie gedruk wees. As ek die gebruik van hierdie metode, kan ek die teks van die knoppie te verander sodra iemand tref, maar ons wil sê wanneer die knoppie is net daar sit Ek wil die teks te leeg wees. Ten slotte, ons gaan my raad te inisialiseer, en ek gaan om te sê dat alles is tans 0, sodat hierdie bord lede onveranderlik is 'n wispelturig skikking, wat beteken ek kan die addObject metode en noem net 'n 0 binnekant van dit. Dit is wat gebeur wanneer ek 'n nuwe spel. Kom ons neem 'n blik op 'n ander een. Hierdie metode is hier die IBAction wat gedruk gaan word elke keer as een van daardie blokkies gedruk word. Nou het ons 'n paar Tic Tac Toe logika hier. Ons uitvind wie se beurt dit is, en gebaseer op wat ons óf 'n X of 'n O, maar ons sien dat ons hierdie selfde event handler is hergebruik vir elke enkele een van die knoppies. Dit beteken dat ek nie 'n metode vir die boonste linkerkantste knoppie, 'n ander metode vir die onderste regterkantste knoppie, maar ek kon gedoen het. Dit sou werklik nie goeie ontwerp. Wat ek hier doen, is ek eintlik gaan om vas te stel wat die etiket van die knoppie wat gedruk is. Jy agterkom dat hierdie drama metode neem een ​​argument. Dit is genoem sender, en watter sender is sender gaan stel presies watter stappe gedoen is op. As ek 'n knoppie druk, is hierdie sender te wees dat UIButton dat ek eintlik gedruk, so dit beteken dat UIButton het 'n tag, want ek het 'n tag. As ek wil kry by die tag, ek kan net sê Ek wil die etiket van die sender, en weer, ek het net gegote dit na 'n UIButton. Ek gebeur om te weet wat die sender sal 'n UIButton wees. Dit hoef nie altyd te 'n UIButton wees. Ek kon, byvoorbeeld, dieselfde event handler  vir een vir 'n knoppie, een vir 'n schuifbalk. In hierdie geval, ek weet hulle is al die knoppies, so ek gaan om te sê Ek wil dit 'n knoppie, en dan kan ek die tag, en van die tag ek nou weet waar ek is binnekant van die raad. Dan kan ek eenvoudig stel die X of die O, kan die draai flip, seker wat, ensovoorts het. Enige vrae oor dit so ver? Okay, al die kode wat ons opgelaai aanlyn ons wil nie te kry in te veel van die Tic Tac Toe logika, maar nou kan jy sien wat werklik al wat ons doen is ons herhaling oor hierdie skikking, so ons het 'n paar vir loops hier, en ons is net te vergelyk om te sien het ons nie 'n wedstryd in al die rye, 'n wedstryd in 'n kolom of iets soos dit. Om werklik te loop hierdie inligting, as ek tik op een van hierdie knoppies dat die spel metode is afgevuur, so dit beteken dat ek net sit die knoppie om 'n X, so moet julle nou hierdie knoppie sal wees 'n O, en so aan, en so dit is hoe ons begin met hierdie enkele bladsy app. Ons sal die kode post, so voel vry om te lees, maar laat ons nou praat oor 'n paar programme wat is meer as net een bladsy. So opwindend soos Tic Tac Toe was, 'n baie van die apps binnekant van IOS is soort van hierdie boor af dinge met verskeie skerms. Die eerste konsep wat ons nodig het om oor te praat is protokolle, en 'n protokol is bloot 'n stel metodes dat jy kan jou belowe om te definieer. As ek skep hierdie nuwe protokol met 2 metodes, hierdie eerste een, indien die opgawe tipe is nietig, ek noem dit cat. Dit neem geen argumente nie. Ek het 'n ander metode. Dit gee 'n int. Ek noem dit bar, en dit neem een ​​argument. Al hierdie protokol is dat SomeProtocol genoem hier, dit is 'n stel van die dinge wat iemand kan implementeer. Ek binnekant van hierdie protokol het nie gesê wat foo doen. In plaas daarvan, is ek net sê dat jy foo kan definieer as jy wil. As ek die skep van 'n oog kontroleerder of die skep van 'n klas Ek kan binnekant van daardie klas belofte te implementeer sommige van hierdie metodes, so byvoorbeeld, indien sê dit sê nou Ek het 'n belofte is vir julle wat binne Ek sal van hierdie siening kontroleerder klas definisies vir beide foo en 'n bar. Hoekom is dit nuttig? 'N baie van die komponente binnekant van IOS neem voordeel van hierdie ontwerp patroon genoem delegasie, en wat die afvaardiging sê is dat, byvoorbeeld, as ek 'n tekskassie en daar is 'n paar gebeure wat binnekant van my tekskassie geregistreer kon word, eerder as die skep van afsonderlike gebeurtenisse wat ek kan doen wat ek kan sê die afgevaardigde van hierdie teksboks sal 'n voorwerp. Wanneer ek sê dat dit 'n afgevaardigde nou wat beteken dat wanneer 'n gebeurtenis afgedank sou gewees het in die tekskassie eerder as om dit te registreer of iets soos dit dit net gaan om 'n metode te roep op die afgevaardigde. Byvoorbeeld, binnekant van my tekskassie Ek het 'n metode vir wanneer ek dit gedoen knoppie in die onderste regterkantste, en so eerder as om te registreer event handler wat ek kan sê is tekskassie, hier is 'n voorwerp wat Ek wil hê dat jy 'n metode om 'n beroep op elke keer as iemand druk op die knoppie "Klaar", en dit beteken dat die voorwerp 'n protokol te implementeer wat sê ek belowe dat gedoen "knoppie aksie te definieer, want as dit nie bepaal dat die metode en jy druk gedoen het, dan is dit gaan verwarrend wees. Kom ons neem 'n blik op 'n voorbeeld. Hier is ek net 'n tekskassie, en een van die eienskappe van hierdie teks boks hier op die regterkant is die afgevaardigde. Dit is 'n eienskap van die klas. Wat ek hier gedoen het is ek beheer gekliek, en ek van hierdie plek gesleep hier die siening kontroleerder, en dit sê nou die afgevaardigde van hierdie teks boks gaan die oog kontroleerder. Dit beteken dat wanneer 'n paar stappe gebeur, eerder as om te registreer aparte gebeurtenis hanteerders Ek wil jou om dit te stuur aan die afgevaardigde. Nou laat ons neem 'n blik op my mening kontroleerder. Binnekant van die h-lêer Ek het 'n belofte gemaak. Ek het belowe om 'n paar metodes te implementeer binnekant van hierdie protokol genoem UITextFieldDelegate, en weer, dit is net 'n lys van 'n paar dinge wat ek kan kies om te implementeer. As ek hier kom in my m lêer, het ek een so 'n metode geïmplementeer. Ek het dit genoem: textFieldShouldReturn want dit is wat dit genoem is binnekant van die protokol. En nou wanneer ek druk die knoppie "Klaar" binnekant van die teks veld dit is wat geroep gaan kry, so ek het nie 'n event handler. Ek verbind die gedelegeerde, en wanneer hierdie gebeurtenis is afgedank Dit is die metode wat genoem sal raak, so as ek kom hier na my storyboard en voer dit uit- Terwyl dit is laai ons kan sien wat dit beteken. Op my skerm Ek het 2 dinge. Ek het hierdie teks veld, en ek het hierdie etiket. Ek net sê ek wil die teks van hierdie etiket te wees gelyk aan wat die gebruiker in die binnekant van die teks veld getik. Hierdie volgende reël hier is eenvoudig 'n metode wat ek vra op die teks veld wat sê ek wil hê dat jy die sleutelbord om weg te steek. Dit is net die arbitrêre metode wat Apple verkies. Weereens, voordat ek enigiets wat ek het alles te bedraad het, sodat ek die eerste keer hier. Uit die oog kontroleerder Ek sleep oor na die tekskassie. Ek laat gaan, en ek kan hier sien dat ek kan die teks veld eiendom sedert meer as hier in die oog kontroleerder Ek het 'n eiendom omskryf wat 'n IBOutlet van 'n teks-veld. Dit sê dat ek kan hierdie eiendom bedraad aan 'n teks-veld in my UI. En toe ek op hierdie kan ek begin tik. Nou as ek klik op die knoppie "Klaar" dit gaan brand 'n gebeurtenis wat ek nou kan reageer. No event hanteerders. Dit is hoe ek net gereageer het op dit gedoen "knoppie. Sin maak? Dit is nie 'n ontwerp patroon dat-jy ooit kan vind nie jouself die skep van jou eie protokol, maar weet net dat sommige verskillende IOS komponente registreer gebeure op verskillende maniere. Knoppies, byvoorbeeld, gebruik daardie IBActions. Teks velde, aan die ander kant, gaan afgevaardigdes te gebruik. Ons kan sien en jy kan sien al van daardie up binnekant van die dokumentasie. By the way, daar is eintlik 'n ton van die UI dinge gebou in IOS vir jou, so byvoorbeeld, die manier wat ek gemaak het wat sê dat aan die onderkant regs is wat ek gekies het hierdie teks veld. Ek het gekom hier. Ek scrolled af 'n bietjie sleutel om terug te keer, en ek kan eintlik maak dit 'n hele klomp van die dinge, soos as ek wil om te sê dat nood noem maar ek kan dit doen, wat is heeltemal random, en ek weet nie hoekom is daar 'n ingeboude in noodoproep knoppie, maar daar, dit sê noodoproep in baie klein letters. Daar gaan jy. Beslis al hierdie verskillende opsies in IOS verken. Enige vrae oor afgevaardigdes? Weereens, net 'n interessante ontwerp patroon wat jy moet bewus wees van. Ok, laat ons die volgende neem 'n blik op die tafel views. 'N table view is basies dat die lys van items wat oor die hele plek in IOS is. As jy daarby deur al jou kontakte, is jy op soek na die instelling bladsy, en daardie soort van die lys van dinge wat genoem word 'n table view. Implementering van 'n table view in IOS is redelik eenvoudig. In plaas van om 'n klas wat uit daardie UIViewController daal soos ons gedoen het voordat ons net nodig om te sê, eerder as alles wat 'n UIViewController nie wat ek wil doen, Ek sê alles wat 'n UITableViewController nie wat ek wil doen, sodat voeg net 'n paar ekstra dinge wat heeltemal vir ons gedoen het. Ons moet baie min basies te vul die spasies in binnekant van die tabel te doen. Ten einde 'n tabel om te wys wat ek nodig het 'n paar vrae te beantwoord. Die eerste vraag wat ek nodig het om te beantwoord, is hoeveel artikels is in die tabel? As jy daarby deur jou kontakte app sal jy sien dat dit is soort van georganiseer deur die As, dan is jy het die Bs, en jy het daardie klein sub header. Elkeen van daardie is 'n artikel genoem. Jy kan of mag nie nodig het om hierdie. Die eerste ding wat jy hoef te doen is om 'n metode te implementeer genoem Tableview: numberOfSectionsInTableView. Dat opbrengste net hoeveel artikels wat jy het, so dit kan sê terugkeer een as jy het 'n groot Table View. Die volgende vraag wat IOS nodig het om te weet, is hoeveel rye het jy? Byvoorbeeld, jy daarby deur middel van 'n tabel vertoning. Jy 'n vaste aantal van die liedjies wat jy is op soek na of 'n vaste aantal van kontakte. As jy my, natuurlik, nie dat baie, en so dit is hoe IOS weet hoeveel selle te vertoon. Weereens, kan dit sê iets soos terugkeer 3. My Table View het 3 rye. Ten slotte, IOS nodig het om te weet wat elke sel lyk, so wat dit eintlik gaan om dit te doen is noem hierdie metode hier onder, hierdie Tableview: cellForRowAtIndexPath. Dit gaan hierdie metode 'n beroep op elke enkele sel binnekant van jou tafel. Hoe werk dit weet hoeveel keer om dit te noem? Wel, jy het dit binnekant van die getal rye in artikel. Ons gaan hierdie 'n beroep op elkeen van ons selle, en binnekant van hierdie is die plek waar jy kan eintlik dinge soos doen stel die teks of vertel wat bietjie blou knoppie aan die regterkant. Die patroon vir die kry van hierdie selle, gaan ons hierdie metode te gebruik genoem dequeueReusableCellWithIdentifier. Objective-C is eintlik baie bekende vir die belaglike lengte van die metode name, en dit is regtig 'n mooi geval in punt voorbeeld. Wat hierdie metode nie, is dit sê net ek wil hê jy gee my 'n sel. Net 'n IOS-ding. As jy iets soos 100,000 liedjies op jou iPod wat IOS nie wil hê om dit te doen, is die toekenning van 100.000 selle, want as jy op die top van jou lys, jy werklik nodig geheue toeken vir die sel wat is 99.000 rye af? Nee, want as jy blaai wat jy kan soort ken as jy gaan saam. Dit is vir jou gedoen. Jy hoef nie bekommerd te wees oor alles wat dom prestasie stuff. Al wat jy sê is jy bel hierdie metode dequeueReusableCellWithIdentifier, en dit sê, okay, as jy wil ek gaan 'n nuwe sel vir jou te skep. Maar as jy aan die onderkant van die tafel en jy het reeds sommige selle toegeken op die top van die tabel wat jy regtig is nie van plan om enige tyd gou moet Ek gaan vir jou een van daardie terug in plaas van die toekenning van 'n nuwe een, en so dit is 'n mooi prestasie kommer. Jy hoef nie die selle self te ken. Dit gaan jou terug te gee 'n sel. Dit gaan om 'n sel voorwerp na julle terugkeer. Sodra jy die sel voorwerp dinge wat jy kan doen om dit te. U kan die teks van die sel met hierdie eiendom genoem teks etiket stel. Jy kan voeg dat die pyl op die reg of 'n ander random stuff met hierdie ander eiendom genoem accessoryType, en so aan en so aan. Kom ons neem 'n blik op die eintlik die uitvoering van 'n table view nou. Toe ek hierdie projek geskep eerder as enkele uitsig aansoek te sê ek het eintlik gekom om hier meester-detail aansoek, en so basies hierdie stem ooreen met die e-pos app op die iPad met die Table View aan die linkerkant en dan die inhoud aan die regterkant. Op die iPod of iPhone dit gaan om ooreen te stem tot 'n enkele Table View. Dit is waar ek my starters kode. Laat ons eers 'n blik op die storyboard. Al hierdie dinge vir my gedoen het, basies geskep. Hierdie navigatiebalk het vir my gewys wat 'n voorbeeld sel kan soos volg lyk: en ek kan dubbel kliek, verander die titel. Enige ander UI bekommernisse wat ek daar kan hanteer. Die header-lêer lyk regtig eenvoudig. Eerder as om te sê dit is UIViewController ons nou sê dit is 'n TableViewController, so weet ons dat ons wil al die tabel metodes te roep. Volgende wil ek 'n eiendom te skep wat gaan verteenwoordig die dinge wat binnekant van my tafel. Hierdie tabel gaan na willekeur te vertoon 'n lys van vrugte, en so het ek 'n skikking te skep wat ek kan plaas vrugte. Binnekant van my implementering lêer die eerste ding wat ek wil doen is Ek wil om seker te maak ek inisialiseer hierdie skikking. Ek het gesê alloc init, geskep my vrugte verskeidenheid, en ek 4 dinge toe te voeg om dit te, waarvan een is veel meer omstrede as die ander 3. En nou het ek 'n skikking van grootte 4. Ons skud dit in CS50. Ek het nou 'n verskeidenheid van grootte 4. Nou gaan ek om te begin met die beantwoording van hierdie vrae, en eintlik, wanneer ek hierdie inligting geskep het al hierdie dinge is reeds vir my gedoen het. Ek het nie uit te tik die aantal artikels in Table View. Dit was reeds daar, en ek is om die spasies in te vul. Hoeveel artikels het ek? Een. Al gedoen. Hoeveel rye het ek? Wel, ek het een ry vir elke vrug, so dit tel is 'n eienskap van 'n skikking wat sê hoe groot is dit? Dit is hoeveel rye Ek het. Ten slotte, ek nodig het om te sê wat elke sel lyk? Ek gaan om te sê dequeueReusableCellWithIdentifier. Weereens, is reeds vir my geskryf. Ek het nie om dit te doen myself nie, en ek wil terug te kry hierdie sel by hierdie plek. Onthou dat ons hierdie metode is 'n beroep op elke enkele sel, en hierdie argument hier, hierdie indexPath argument, sê watter ry ek. As ek sê indexPath.row hier neer dit sal wees 0, dan sal dit 1, dan is dit sal wees 2, en dit is so ek weet watter sel ek tans is vertoon. Ek wil die teks van die sel op te stel deur gebruik te maak van hierdie textLabel eiendom binne te gaan my vrugte verskeidenheid en kry die doel wat ooreenstem met elke ry. As dit is 'n string, ek nou die opstel die teks eiendom aan 'n string. 'N ander ding wat ek kan doen. Ek kan ook 'n event handler op elk van die selle, sodat wanneer ek tik elk van hierdie selle hierdie didSelectRowAtIndexPath, gaan dit vir my genoem te word, so ek kan nou net deur die definiëring van hierdie hanteer wat gebeur wanneer jy tik 'n sel, en weer, ons verby wat die sel getik sodat ons kan onthou dieselfde event handler vir almal van ons selle. Weereens, dit is iets IOS doen vir my. Kom ons 'n ander popup wat sê net jy opgetel iets waar dat daar iets gaan na die ry voorwerp. Wanneer ek hardloop, ek gaan hierdie mooi Table View met een ry vir elk van hierdie vrugte, en indien Ek tik een dit vertel my wat gebeur het. Sin maak? Kom ons bou 'n bietjie meer kompleks van 'n app, so veel as 'n klik jy opgetel tamatie is. Die lekker deel oor die storyboarding is dit nie net gaan ons ontwerp skerms individueel te help, dit ook gaan om ons te help met die bind saam ons hele app, sodat die finale app ons sal gebou is hierdie pragtige sport nuus leser, en so is dit gaan verskeie skerms te hê, en daarom kan ek eintlik verteenwoordig elk van hierdie verskeie skerms op die storielyn, en ek kan zoom uit en sien my app uit 'n hoë vlak. Ten einde 'n nuwe element binnekant van my storielyn te skep dit is regtig eenvoudig binnekant van Interface Bouwer. As ek wil nog 'n skerm te voeg tot hierdie, byvoorbeeld, Ek kan eers uitzoomen met die knippie zoom dat Apple het so baie lief, en af ​​hier voor ek soek vir 'n knoppie en ek sleep en 'n knoppie as ek wil 'n nuwe skerm te skep, kan ek eintlik net sleep en drop 'n hele siening kontroleerder, so as ek kies hierdie, trek dit hier, hey, daar is 'n ander skerm, en so nou met behulp van hierdie selfde storyboard lêer Ek kan al die skerms binnekant van my app, en ek kan uitzoomen en sien hoe hulle omgaan. Dit sal nog nie interaksie. Die manier waarop wisselwerking tussen hierdie 2 skerms is jy definieer verhoudings. Jy kan basies sê hierdie skerm, wanneer u op hierdie knoppie, Ek wil hê dat jy oor te skuif na hierdie nuwe skerm. Dit beteken dat daar is hierdie soort van die verhouding tussen  die eerste skerm en die tweede skerm. Jy sal basies 'n pyl van die knoppie na die tweede skerm sê dat wanneer jy druk die knoppie dit is waar ek wil om te gaan. Net soos ons beheer klik en sleep die winkels te definieer ons gaan dieselfde ding om te doen hierdie segues te definieer. Ons sal 'n voorbeeld te sien vir wat, en voor ons eintlik oorgang van een skerm na 'n ander IOS is mooi genoeg om hierdie metode te roep genoem prepareForSegue, en dit is waar ons kan begin die stuur van data van een program na 'n ander. In die voorbeeld wat ons is om te kyk na dit sal toelaat dat ons basies baseball spanne te filter deur ligas en afdelings. Toe ek 'n liga kies, byvoorbeeld, ek wil oorgang tot my volgende skerm waar ek kan al van die afdelings in daardie liga of al die verskillende spanne. Ek nodig het om te stuur na die skerm watter spanne jy moet vertoon. Om te doen wat ek gaan om voordeel te trek van hierdie metode hier. Ten slotte, net 'n willekeurige punt op IOS. As jy wil om data op te slaan daar is hierdie ding genaamd kern data, wat is eintlik soort van ingewikkeld om te werk met. Jy kan ook gebruik SQL data op te slaan, wat weer is lekker, maar soort van op die meer ingewikkelde kant om mee te werk, maar IOS ondersteun ook hierdie baie cool dinge eiendom lyste, en 'n eiendom lys is net 'n lêer wat verteenwoordig sleutel waarde pare. Jy definieer 'n lys van sleutels, en jy sê hierdie sleutel gaan om 'n skikking te wees. Hierdie sleutel is gaan na 'n string te wees, en basies enigiets wat jy kan doen jy kan binne in into doen van 'n eiendom lys, en so dit kan werklik mooi om ons om te werk met 'n paar data. Byvoorbeeld, ek het hierdie Teams.plist dat ek geskep het. Wat ek gemaak het 'n nuwe plist lêer, en ek kan detail weer te gee. Dit is 'n woordeboek, dit is 'n woordeboek, dit is snare, en so dit is 'n mooi grafiese voorstelling van 'n JSON-dokument of net 'n stel van die belangrikste waarde pare, en so dit is die data wat ek sal werk met die binnekant van my app. Kom se eerste kom hier. Ons het nou 'n baie meer lêers. Maar laat ons eers kom hier om die storielyn. Die storyboard hier as ek kan uitzoomen- Ons kan nou sien dat dit die vloei van my jeug. Ek eers gaan om te begin op hierdie skerm. Ek gaan om te boor af na hierdie skerm, en ek gaan om te boor af na hierdie skerm, en ons kan hier sien dat as ek soort van beweeg een van hierdie rondom ons het hierdie pyle gaan van hier tot hier, en die manier waarop ek bepaal dat die pyl was as ek zoom in 'n bietjie, en as ek kom oor hierdie siening kontroleerder, en hier is 'n sel, en ek wil om te sê dat wanneer jy tik 'n sel Ek wil hê dat jy oor te skuif na 'n ander skerm. Ek kan eenvoudig hou beheer, scroll oor 'n bietjie, hou beheer, sleep hierdie sel oor en laat gaan. En hier is ons sê wat is die oorgang wat jy wil gebruik? Wil jy dat slide ding wat genoem word druk om te gebruik? Wil jy te skuif uit die bodem? Dit is genoem modale. En nadat ek kliek op een van hierdie, gaan dit hierdie arrow te trek vir my, en dit beteken dat ek eintlik het hanteer wat gebeur wanneer ek druk die knoppie grafies. Ek het nie skryf 'n kode om werklik te skuif van een skerm na die volgende een. Ek omskryf dit visueel binnekant van Interface Bouwer. As ek kliek op die pyltjie om, kan ons sien dat Ek het hierdie ding 'n naam. Ek noem dit showDivisions, en dit is sodat ek kan weet watter oorgang is om plaas te vind, en ons sal sien waarom net 'n sec. Dit is hoe ek bedraad die verskillende skerms in my app. As dit 'n knoppie, byvoorbeeld, eerder as 'n Table View, Ek kon beheer op die knoppie klik, sleep oor na die volgende skerm, en dit is hoe ek navigasie dié manier kan doen. Regtig vinnig, as ons in die MasterViewController kom, weer ons net gaan om 'n lys van dinge om te definieer wat sal vertoon word in die Table View. Hier is ek sê: Ek wil hê dat jy plist lêer te neem, en ek wil hê jy moet dit in 'n woordeboek te laai, en as jy het dat die woordeboek, ek gaan daardie vrae weer te beantwoord. Hier is die getal van die afdelings. Een, is daar een ry vir elke liga, en die teks van elke sel moet óf die eerste een, die eerste liga, die tweede liga, en so aan. Ten slotte, ek gaan om hierdie metode te gebruik dat ons nou net gesien het genoem prepareForSegue, en dit is die metode wat afgedank gaan word as ek daarop kliek op een van daardie rye en daarom aktiveer dat die oorgang dat ek met die pyle. Dit sê dat ek kan meer as een verhoudings van een skerm na 'n ander. As ek het 2 knoppies en elke knoppie neem jou na 'n ander skerm Ek gaan 2 segues, 1 vir elke knoppie te hê. Maar hierdie prepareForSegue is, weer, gaan hergebruik word vir elk van die verskillende verhoudings, so dit beteken dat ek nodig het 'n manier te identifiseer as jy op die eerste knoppie of jy die knoppie druk. Onthou toe ek het dat segue 'n naam, dit showDivisions, dis hoe ek weet nou dat dit die segue wat geaktiveer is. Al wat ek wil doen, wil ek sê Ek wil om uit te vind wat ek nou net getref het, en so dit te kry, kan ek sê dat ek wil die indexPath vir die geselekteerde ry, onthou die indexPath sê net waar ek net gekliek, en dan wil ek om te sê ek wil uitvind waar ek gaan. Dit destinationViewController, dit is 'n eienskap van die segue. Dit is die skerm ek gaan, so ek weet dat die skerm wat ek gaan om te genoem word DivisionsViewController omdat ek daardie klas geskep, en so nou as ek sê d.divisions Ek nou die opstel van 'n eiendom van die oog kontroleerder Ek is oor te gaan na. Dit is hoe ek is die stuur van data van een skerm na 'n ander skerm. Net te kyk na hierdie DivisionsViewController jy hier kan sien dat in die h-lêer. daar is dat die eiendom afdelings, en dit is wat ek basies is mense, so dit is hoe ek weet dat ek die ooreenstemmende afdelings is vertoon die liga dat ek gekliek het, en weer, die werklike Table View lyk pretty much dieselfde, net die beantwoording van daardie 3 eenvoudige vrae sowel as die identifisering van wat gebeur wanneer jy beweeg na die volgende skerm. Net 'n paar ander dinge hier. Jy agterkom by die top dat eerder as om te sê # include Ek nou sê # invoer. Dit is net 'n Objective-C ding. Die invoer is basies 'n mooier weergawe van die volgende insluit, en byvoorbeeld, ons nodig het om te weet wat hierdie klas is, so ek kan nie net sê DivisionsViewController. As ons dit nie hashtag standardio.c binnekant van ons c-lêer. die vertaler het geen idee gehad wat printf was. Net so, as ek voer nie die DivisionsViewController die vertaler het regtig geen idee wat 'n DivisionsViewController is. Maak net seker dat die binnekant van jou verskillende m lêers jy seker maak om in te voer die ooreenstemmende h lêers sodat die vertaler weet wat gaan aan. Ten slotte, wat Apple uiteindelik doen, is sommige data met behulp van 'n web loer vertoon, en so 'n web siening is 'n voorwerp wat jy kan inbed 'n bietjie webblaaier binnekant van jou jeug. Al wat jy hoef te doen, is om 'n URL verskaf aan jou webblaaier, so ek wil te gaan na mlb.mlb.com, en dit is hoe kan ek toegang tot die tuisblad vir elke span, en so deur in hierdie URL kan vertoon die web loer vir my, en ek kan rond kyk, en simulator is in gebruik deur daardie een. Nou het van my plist. As ek op hierdie het ook van my plist, en dit gly hanteer deur definieer diegene segues. Ek kliek op hierdie en nog een, en nou is hier my UIWebView, sodat net soos wat hier is die webwerf vir die URL wat ek net ingebed, en ek het nie iets gek te hanteer. Dit is hoe om 'n webblad te vertoon. Dinge soos hierdie terug-knoppie hier is ook aan my gegee heeltemal gratis, want ek het hierdie verhoudings met segues gedefinieer. Enige vrae? Ja. [Studente] So wanneer jy gebruik alloc, jy nooit moet vry enigiets? Presies, wanneer jy noem alloc en init jy nie om dit te bevry. IOS gaan al wat vir jou te hanteer. Dis wonderlik, en jy nie enige reëls te breek nie. Ja. [Studente] As jy meer spanne wat kan pas op die skerm te sluit, sou dit outomaties 'n scroll opsie, of is dit iets wat jy nodig het om by te voeg? Presies, as ek het meer spanne, byvoorbeeld, sou dit outomaties hanteer die blaai vir my, en al die prestasie betref met die groot tabel word ook behandel heeltemal vir my. Ander vrae? Al hierdie kode gaan gepos word. Ons is soort van satinee meer as 'n bietjie van die meer minder belangrike besonderhede, maar dinge soos die opstel van 'n paar eienskappe na die web loer is net die dinge wat jy kan kry deur op Apple se dokumentasie, wat is regtig, regtig mooi uitgelê. Hulle het 'n baie van die monster apps en voorbeeld gebruike van verskillende API's, so beslis nagaan as jy kan. Net 'n paar nuttige skakels wat jy kan 'n blik op te neem. Dit is 'n paar nuttige dokumentasie gidse. Die URL's is groot, sodat hulle verkort. Die eerste een is die hele biblioteek van dokumentasie. Daar is min search bars, so as jy begin tik knoppie dit sal begin gee jou al die inligting oor al die dinge wat jy kan doen met 'n knoppie. Ek het ook die Table View Programmering Guide. Dit hanteer tafel views in veel meer detail, hoe om dinge te doen soos dinamiese selle of wysig selle by te voeg of te verwyder. Daar is baie van die monster apps van Apple wat sal jou wys hoe om dit te doen, en uiteindelik, hierdie laaste een is die Human Interface Guidelines, en dit is basies 'n bespreking van die UI komponente, dinge soos maak nie 'n knoppie wat is 4 pixels deur 4 pixels. Dit is 'n slegte idee nie, en ander dinge wat Apple wil hê jy moet doen goeie ontwerp aan te moedig. Enige laaste vrae voor ons klaarmaak? Alle reg, beslis voel vry om-we're gaan spesiale etikette op Bespreek te hê. Ons sal 'n IOS een, so seker voel vry om dit aan te wend. As jy wil om te werk met jou klasmaats op projekte of help om uit te vind 'n paar random IOS stuff voel vry om my te e-pos, en beslis al die kode aanlyn omdat nagaan net in die belang van die tyd wat ons soort van satinee oor die meer fyner korrelige besonderhede van dinge. Maar so nie, dan baie geluk op jou IOS-projekte, en ek hoop ons het 'n groot instroming van programme in die App Store. [CS50.TV]