[Powered by Google Translate] [Seminaari] [iOS: kirjoittaminen apps kuten Boss] [Tommy MacWilliam] [Harvardin yliopisto] [Tämä on CS50.] [CS50.TV] No niin, kaikki, tervetuloa iOS: Kirjoittaminen Apps kuin Boss. Tämä seminaari on menossa keskittyä kirjallisesti apps varten iPhone ja vuorostaan ​​kirjallisesti apps iPad, ja niin me pohjimmiltaan menossa kulkea pari erilaista esimerkkiä miten sovellus, yksinkertainen peli kuin Tic Tac Toe, tai jos olet enemmän kiinnostunut tekemään app jonkinlaisena uutislukijan tai jotain, vuorovaikutuksessa Internetin aion puhua, että samoin. Tässä on meidän lyhyt asialistalla. IOS apps on kirjoitettu kielellä nimeltään Objective-C, ja niin tämä on hieman samanlainen kuin C, mutta ei oikeastaan ​​ollenkaan, niin me voidaan puhua hieman siitä itse kieli ja sitten miten rakentaa iPhone sovellukset käyttävät tätä app ohjelma nimeltä XCode, jotka, jos et ole ladannut sitä vielä rohkeasti Käynnistä lataus nyt. Se on useita gigatavuja. Sen pitäisi olla ilmaiseksi App Storesta, joten sinun täytyy olla Mac ihanteellisesti käytössä uusin versio OS X Jos et ole, ei ole ongelma. Olemme Maceja tiedekeskuksen käytettävissäsi Xcode asennettuna, joten voit käyttää näitä kehityksen. Jos haluat tehdä app, mutta ei ole Mac, älä huolestu. Siellä on runsaasti kampuksen varoja tähän. Ja niin sitten aiomme kattaa 2 suurempi esimerkkejä eri apps voit tehdä. Objective-C on teknisesti mitä kutsutaan Super Set C. Tämä tarkoittaa, että C-koodi on voimassa myös Objective-C-koodia. Tämä tarkoittaa, että sellainen kanava teipattu joitakin lisäominaisuuksia C. Jotkin näistä ominaisuuksista ovat ei tarvitse koskaan kirjoittaa malloc uudelleen, luojan kiitos, ei tarvitse murehtia niitä typeriä osoittimet ja vapauttaa heidät ja kaikki jutut sinun vihasi noin C, ja se on tavallaan mennyt Objective-C. Nyt, Objective-C on myös paljon suurempi vakio kirjasto, joten siellä on paljon enemmän toimintoja saat ilmaiseksi sisälle Objective-C. Muistatko, kun olimme kirjallisesti PHP huomasimme, että meillä meni Tämä pienin kieli jättiläinen kirjaston kaikki nämä hulluja asioita voit tehdä. Sama tapahtuu iOS. On kohteita asioita kuten buddhalaisen kalenterin, ja oikeastaan ​​mitään voit mahdollisesti ajatella luultavasti olemassa jo Objective-C: n toteuttamista. Tavoitteena osa Objective-C viittaaminen jotain kutsutaan Object-Oriented Programming. Tämä on eräänlainen uusi käsite, mutta olemme oikeastaan ​​enimmäkseen oppinut paljon näitä käsitteitä jo. Ajatus Olio-ohjelmointi on, että olet menossa jäsentää paljon koodisi noin näitä asioita kutsutaan luokkiin, ja nämä luokat ovat todella kirkastettu tietueet. Sisältä struct me pohjimmiltaan sanoi täällä on asia, ja tämä asia voi olla jäseniä. Esimerkiksi solmun linkitetyn listan voisi olla muita asioita kuten arvo, joka on osoitin seuraavaan solmuun listassa, ja yhdessä, että osoitin ja että arvo muodostuu tämä yksi esiintymä struct. Luokat ovat hyvin samanlaisia, paitsi luokat voivat olla myös toimintoja sisällä niitä. Kun me julisti struct, voimme vain sanoa int n tai solmun * seuraavaksi. Nyt Objective-C voimme tosiasiallisesti toiminnot sisällä näitä asioita. Toinen asia, että luokat voivat tehdä, on ne perivät tietoja muihin luokkiin. Esimerkiksi me tarkastelemme joukko sisäänrakennettu Objective-C luokissa. Yksi niistä voisi olla luokkaa joka edustaa näkymän näytön, ja niin sanomalla haluan toteuttaa oman näkemykseni me pohjimmiltaan sanoa jonkun haltuun Apple, luultavasti todella mukavia ihmisiä, Kirjoitin tämän luokan minulle, ja se käsittelee asioita, kuten esillä painikkeet tai tekee näytön, ja olisimme todella tuskainen toteuttamaan kaikki toiminnot itse, ja niin yksinkertaisesti peritäänkö tietojen voimme sanoa kaiken teit kyseisen luokan Haluan myös sisällä minun luokka, ja sitten aion tehdä joitakin muita juttuja, nimittäin toteuttaa sovellus. Sitä se sana perintö tarkoittaa. Näemme enemmän konkreettinen esimerkki. Ja lopuksi, avain Object-Oriented Programming on, että se johtaa tietojen kapseloinnin. Joissakin meidän ongelma asettaa saisimme nämä suuret, globaalit muuttujat ja global kaikkialla, ja näin olimme seurata valtion. Oppilasryhmien kanssa voimme aloittaa tiivistetään tietoa sisällä kohteen. Jos meillä on yksi näyttö meidän app, emme todellakaan tarvitse mitään tietoja toinen näyttö meidän app sisällä siitä, ja niin kapseloimalla asioita luokissa tämä todella johtaa paljon parempi koodi suunnittelu, ja tämä on mahdollista joitakin lisäominaisuuksia ja Objective-C. Ennakkovaroituksen, syntaksi Objective-C on banaaneja. Se on kuin mitään olemme nähneet ennen, joten se on hieman oppimiskäyrä tottua mitä ihmettä tämä tarkoittaa? Mutta kun saat ohi että alkuperäinen oppimiskäyrä on todella, todella sileä Aloita kirjoittaminen apps. Julistaa luokka, eli tässä on minun luokka, on olemassa, ja ehkä tässä on muutamia asioita, joita aion määritellä myöhemmin, Aion sanoa @ käyttöliittymä. Aion sanoa @ käyttöliittymä. Aion antaa minun luokan nimi. Ja sitten myöhemmin jossain muualla aion sanoa @ loppuun, ja kaikkea siltä väliltä @ liitännän ja @ loppuun tulee olemaan minun luokkaa. Tämä tulee olemaan mitä on sisällä meidän. H. tiedostoja. Aivan kuten C meidän. H. tiedostoja pohjimmiltaan sanoi täällä on joitakin asioita, jotka ovat olemassa. En välttämättä kerrotaan mitä he tekevät vielä, mutta kääntäjä tarvitsee tietää, että ne ovat olemassa. Myöhemmin sisällä meidän. M-tiedostot-koska m Objective-C on missä olemme todella menossa määritellä, mitä nämä luokat tekevät. Aivan kuten meidän. C-tiedostoja, tarjosimme toteutuksen toimintoja. Sisällä meidän. M tiedosto aiomme sanoa tässä mitä kaikki toiminnot sisällä minun luokka-mitä ne kaikki tekevät. Ja lopuksi, sisällä struct voisimme sanoa sisäpuolella näiden aaltosulkeita int n tai solmu * ensi- ja Objective-C aiomme käyttää avainsanan @ omaisuutta, ja tämä on mitä tulee määritellä ominaisuuksia, tai ei-toimintoja, jotka ovat osa tunneilla. Soittaminen toimii Objective-C on myös banaaneja. Kun ilmoitettu toiminnot C sanoimme jotain int foo ja avoin kantatuote ja sitten antoi sen listan argumentteja. Tämä on mitä julistetaan menetelmiä tai toimintoja näyttää Objective-C. Jos haluan julistaa toiminto tai menetelmän missä Sanon menetelmä on oikeastaan ​​vain funktio, joka on jäsenenä luokan, joten sellainen vaihdettavissa, mutta ei oikeastaan, joten sisällä minun tapa Haluan luoda uusi menetelmä. Se tulee takaisin mitään, joten se tulee olemaan tyyppiä void. Tämä on palautuva tehtäväni. Nyt meillä on parens täällä koska-en tiedä. Seuraava tulee olla nimi minun toiminto, ja lopuksi meillä puolipiste aivan kuten meillä oli C. Mitä uutta tässä on tämä kaveri täällä. Tämä tavuviiva on todella tarpeellista, ja mitä tämä sanoo, että Tätä menetelmää tässä on kehottanut esiintymä luokan. Kun olemme julisti meidän tietueet me varmaan sanoi jotain struct solmu n, ja että todella luodaan tai instantiated yksi niistä tietueet niin että voisin oikeastaan ​​aloittaa työt mitä on sisällä siitä, joten tämä viiva tarkoittaa, että meidän on instantiate luokan aivan kuten me instantiated että struct ennen kuin voimme kutsua tätä menetelmää siihen. Jos haluan aloittaa lisäämällä argumentteja minun menetelmiä se saa vielä enemmän banaaneja. Tässä on minun menetelmän nimi. Sitten aion olla kaksoispiste, ja tämän jälkeen kaksoispiste sanotaan tässä tulee joitakin perusteluja. Tämä menetelmä vie yhden argumentin. Tyyppi väite on int, ja nimi väitteen tai muuttuja aion alkaa käyttää sisällä menetelmää kutsutaan i. Jälleen kerran, tämä on menetelmä. Se kestää yhden argumentin. Jos haluat aloittaa lisäämällä argumentteja se saa enemmän banaaneja että olemme tällä kaksoispiste joka sanoo tässä tulee lista argumentteja. Tämä ensimmäinen argumentti on kokonaisluku. Nyt tämä toinen väite on mielenkiintoinen. Muuttuja aion käyttää sisällä minun toiminto kutsutaan f, joten sisällä minun toiminnon voisin sanoa f + = 1 tai jotain. Tämä juttu tässä on pohjimmiltaan avain väitteen tai parametri. Aivan kuten meillä oli avain arvo-pareja ja jotain JSON tai assosiatiiviset taulukot Objective-C teki päätöksen sanoa, okei, juuri niin, että se on todella selvä Kun soitat menetelmä mitä kaikki nämä parametrit eivät Olen todella tulee nimetä ne kaikki. Kun soitat menetelmän, sinun todella sanoa andFloat, ja sitten voit siirtää sen sisään Kiinnostavaa kyllä, tämä ei ole nimetty, mutta kaikki muut parametrit ovat, joten jos meillä oli kolmas argumentti voisin sanoa andFloat ja toisen juoksun ja niin edelleen. Kun Kutsun näitä menetelmiä on tietenkin banaaneja, joten jos olen esine, ja olen määritellyt menetelmää kutsutaan foo- ja haluan kutsua sitä kuin sanoa foo / auki parens Aion avata teline. Tässä nimi minun menetelmällä. Aion sulkea teline, ja tämä on esine soitan sen. Muista, että kaikki nämä menetelmät esiintyy luokkiin koska luokat voivat olla määritellyt menetelmät sisällä niitä. Täällä olen omavaltaisesti luonut kohde joidenkin luokan ja tämä on syntaksi näin. On 2 luon objekti. Ensimmäinen vaihe on, että haluan jakaa tilaa. Tämä on sama kuin malloc. Meillä ei ole sanottavaa malloc enää. Me putosi m, teki alloc, ja korvattiin. C. M.. Kun olemme alloc meidän sitten täytyy alustaa sen. Periaatteessa kun luot objekteja saatat haluta olla jotain logiikkaa että suoritetaan, kun he luotu, joten voit siirtää tietyissä oletusarvot tai jotain, ja niin tämä init menetelmä on mitä todella luo objektin. Ensin varata tilaa, aivan kuten teimme C, ja sitten alustaa se, joka voi tai ei voi tehdä paljon. Sitten olemme palaamassa tämä asia tulee objekti o. Siellä tähti täällä, koska tämä on teknisesti osoitin, mutta älä huoli, osoittimet eivät ole niin iso juttu Objective-C enää. Nyt olemme instantiated tämän luokan nimeltä NSObject, ja tämä on vain satunnainen luokka, että Apple on. Olemme instantiated tätä, ja nyt minulla on esimerkiksi tämän luokan Tässä objektin o, niin se tarkoittaa, että jos on määritelty Näiden menetelmien Voisin soittaa heille näin. Samoin jos halusin soittaa menetelmä yhden väitteen, joten tämä on baari menetelmä, joka vie yksi argumentti, ja tässä on Baz: qux menetelmä, joten tämä vie 2 argumentteja. Tämä vaatii yksi toiminto on tämä esine o. Järkeä? Syntaksin pitäisi järkeä, mutta tavallaan tottuu. Okei, puhutaanpa muutamia asioita, jotka on rakennettu Objective-C , joita ei ole välttämättä rakennettu C. C meillä sellainen piti käsitellä merkkijonoja näitä typeriä merkin matriiseja, ja se sai todella ärsyttävää. Objective-C on ne kaikki rakennettu meille, ja se on rakennettu vuonna Käyttämällä tätä luokkaa kutsutaan NSString. Kun haluan luoda NSString olemme enemmän mystistä syntaksi. Sen sijaan sanomalla "cs50" sanomme @ "cs50" ja tämä on vain syntaksi julistamisesta jousille Objective-C. Tämä on erittäin helppo unohtaa, joten älä. Nyt, kun minulla on tämä, tämä on merkkijono, mutta huomaa se on oikeastaan ​​vain esine. Sanoin NSString, mikä tarkoittaa minä instantiated luokka kutsutaan NSString, jotka joku muu kirjoitti minulle, ja he olivat erittäin mukavia siitä, joten nyt Voin aloittaa kutsuvan menetelmiä sitä. Jos minä soittaa menetelmä pituus tämän esineen s se tulee takaisin minulle langan pituutta. Tämä on aivan strlen in C Tämä palauttaa 4. Samoin toinen menetelmä voisin haluta välitä tämä characterAtIndex. Tämä on menetelmä, joka sanoo tämän string s Haluan saada nollas merkin, joten tämä palaisi minulle merkin c, ja siellä koko joukko enemmän näistä menetelmistä, joita voit googlata todella helposti. Applen dokumentaatio on suuri, ja me katsomaan, että hieman. Nämä ovat merkkijonoja. Olemme myös erikokoisten ryhmät sisäänrakennettu Muistakaa C kun julisti array meillä oli sanottavana sinulla on 5 elementtejä, Tarinan loppu. Kun pääsimme JavaScript ja PHP voisimme aloittaa tehdä asioita, kuten lisäämällä elementtejä tai liikkuvia osia. Voimme tehdä saman Objective-C. Sen sijaan luoda array normaaliin C tapa meillä on taas toinen luokka kutsutaan NSMutableArray. Mukana on myös NSArray, ja tämä tulee periaatteessa kiteyttää joitakin array. Tämä kertoo ensimmäinen asia jonka haluan tehdä on haluan jakaa tilaa uudelle array, ja sen jälkeen olen jakaa sen Sitten täytyy alustaa sen. Jälleen vain soittamalla nämä 2 menetelmiä. Nyt tämä tarkoittaa, että sisällä tämän kohteen Olen tyhjä joukko istuu siellä. Jos haluan lisätä jotain tähän array, voin soittaa addObject menetelmällä. Haluan lisätä objektin array, ja haluan lisätä merkkijono CS50. Jos halusin toisaalta poistaa, että voin sanoa haluan poista esine ensimmäisessä paikka array tai vastustaa. Järkeä? Okei, olet tavallaan tottua tähän hakasulje juttu. Muuten, sisällä paljon Applen kirjastojen näet tämän NS. NS oikeastaan ​​tarkoittaa seuraava askel, joka oli yksi Steve Jobs ensimmäisistä yrityksistä, ja se jos hän todella alkoi kirjoittaa paljon koodia eräänlaisena perustana Mac OS X ja kaikki muita juttuja, ja niin tämä NS on tavallaan tämä mukava perintö huutaa yhteen aikaisempien yritysten takaisin, kun Apple oli ensimmäinen alkaa. Se on kaikkialla. Katsotaanpa katsomaan kokonaisvaltaisempaa Objective-C esimerkki. Tässä olen sisällä XCode. Tänne, olen ladannut ensimmäisen XCode App Storesta, avasi sen, ja sitten menin tänne tiedoston, tänne uusia, ja sitten projekti. Kun minä, että minulla on kaikki nämä vaihtoehdot, mitä haluan luoda, ja niin me katsomaan asetuksia myöhemmin, mutta vain tässä esimerkissä, koska emme oikeastaan ​​olemaan app vielä, Tulin tänne, ja sanoin komentorivityökalu, ja tämä on sovellus, jonka voisin ajaa komentoriviltä aivan kuten olemme pakoillut C. Niin olen luonut tämän projektin, joten nyt olen täällä, joten katsotaanpa ensin katsoa tämän tiedoston, ja tämä pitäisi näyttää aika tutulta. Olen int nimeä. Siellä on ystäväni argc, toinen kaveri argv. Ja niin me voimme nähdä, että tämä on yhteyspiste ensimmäinen Objective-C sovellus. Täällä voimme jättää tämän nyt. Tämä on pohjimmiltaan muistia johto kamaa, että et todellakaan koskaan tarvitse murehtia. Katsotaanpa tämän ensimmäisen lohkon täällä. Tämä ensimmäinen rivi, jos sanon Opiskelijan * Alice = [[Opiskelijan alloc] init] mitä se tekee? Tämä ensimmäinen opiskelija täällä, tämä on luultavasti luokkaa. Tämä ei ole luokkaa, että Apple kirjoitti, mutta se luokka, että olen kirjoittanut. Ensimmäinen asia mitä haluan tehdä on haluan jakaa tilaa uusi opiskelija, ja sitten haluan alustaa sitä, joten tämä antaa minulle takaisin Tämä uusi opiskelija esine, ja olen tallentamalla tämän muuttujan nimeltä Alice. Mistä tuo luokka tuli? No, täällä vasemmalla puolella nämä ovat kaikki eri tiedostojen sisällä projektin. Voimme nähdä täällä olen Student.h ja Student.m. . H tiedostoa, muistan, on kun julistan kaikki asiat että on olemassa luokan sisällä. Katsotaanpa katsomaan sitä. Selvä, tässä meillä on tämä @ käyttöliittymä, ja tämä sanoo, että tästä tulee julistukset kaiken ovat olemassa sisällä minun luokassa. Sitten on kaksoispiste. Sitten on tämä NSObject juttu. Tämä kaksoispiste osoittaa, että perinnön vähän keskustelimme hieman aikaisemmin. Tämä kertoo kaiken NSObject voi tehdä jos NSObject tämä luokka kirjoittanut joku muu, kaikkea tätä NSObject voi tehdä haluan pystyä tekemään se. Sanomalla: NSObject se tarkoittaa, että olen periaatteessa perinyt kaikki toiminnot ja toisen luokan. Se todella antoi minulle läjän erilaisia ​​menetelmiä ja ominaisuuksia, että voin käyttää. Täällä Luon 2 kiinteistöä. Tämä tarkoittaa minun opiskelija, jos tämä olisi struct, nämä olisivat 2 asioita sisällä minun struct, joten jokainen opiskelija on nimi että on merkkijono, ja opiskelijan on myös laatu, joka on int. Lopuksi, täällä aion luoda menetelmä minun opiskelija. Kutsuin menetelmä, initWithName, ja se kestää yhden argumentin, ja tämä väite on merkkijono, ja kutsuin sitä nimeä. Nyt katsokaamme miten tosiasiallisesti täytäntöön tämän luokan. Tässä nyt olen sisällä minun. M-tiedosto, m täytäntöönpanoon, luulisin. Minulla on täytäntöönpanoa, minun pää, ja tässä kohtaa olen itse määritellä mitä initWithName tekee. Olen initWithName, nimi minun parametrin, ja sitten tämä Siellä olen itse luoda opiskelijan, ja niin tämä on hieman arvoituksellisesti, mutta tämä on tavallaan boilerplate jotka haluat sisällyttää rakentajille. Tämä alustus toiminto täällä, initWithName, on tyyppi rakentaja. Olet periaatteessa rakentaa uusi opiskelija esine ja ehkä lähettää joitakin tietoja sen sisälle. Ensimmäinen asia mitä haluan tehdä on haluan kutsua init tässä erittäin juttu. Muista, että kun sanoin takaisin täällä. H tiedosto että kaikki NSObject on opiskelija myös. Tämä tarkoittaa, kun luon opiskelija mitä minäkin tarvitsee tehdä on Varmista että NSObject että olen perinyt kaikki, että tiedot on myös alustettu oikein. Mitä minun täytyy sanoa tämä erittäin ylipäänsä viitata vanhemman luokan että olen periä päässä, joten haluan varmistaa minun alustaa kaiken olen riippuen ennen kuin alkaa yrittää käyttää sitä. Sitten jos alustettu oikein tämä on aivan kuin sanoisi, jos malloc ei palauta null voin aloittaa asettamalla joitakin ominaisuuksia. JavaScript ja PHP olimme tällä avainsanalla kutsui tätä, ja tämä viittasi nykyiseen esiintymä luokan. Objective-C kutsumme tätä itse. Kun sanon self.name, se tarkoittaa, että esine Olen juuri luonut kun sanoin opiskelija alloc init, että menee antamaan minulle takaisin esineen. Tämä tarkoittaa Haluan asettaa nimen että esine ja mitä olen juuri läpäissyt sisään Aivan kuten C meillä pääsy jäseniä tämän pisteen joten self.name kertoo opiskelijan nimi esineen nyt olemaan mitä juuri läpäissyt sisään Ja niin lopuksi voin palauttaa sen niin olen todella saada jotain takaisin. Kysymyksiä? Okei, joten tämä itsestään = erittäin init, Jos et täysin ymmärrä perintönä kamaa ei hätää. Vain tietäkää, että jos joskus haluat tehdä oman init menetelmä vain tehdä, ja sinun on hyvä mennä. Joo. >> [Opiskelija] Mitä jos itse tarkoittaa? Tämä tarkoittaa, kun me malloc me aina tarkistaa, jos se oli sama null, ja jos se oli nolla, sitten me poistutaan. Tämä on sama asia, sillä jos tämä palaa null, niin olemme luultavasti menossa segmenteille vika jos alamme yrittää manipuloida sitä. Se on meidän opiskelija luokassa. Tämä tarkoittaa, että voimme alustaa opiskelijoille kahdella eri tavalla. Jos sanon opiskelija alloc init en käytä tätä menetelmää, että minä vain kirjoitti, vaan voin yksinkertaisesti sanoa alice.name, ja nyt aion asettaa, että kiinteistön nimi. Samoin jos haluan käyttää tätä initWithName menetelmää Voin vain sanoa alloc, ja sitten kuin sanomalla init Aion soittaa että menetelmä, että olen juuri luonut, ja aion kulkea Bob. Tässä vaiheessa tämä tavoite Bob on nimi yhtä Bob. Okei, täällä olen käyttäen, että NSMutableArray että me katsoimme aikaisemmin. Olen jaettaessa space.Then Olen alustaa uuden taulukon. Aion lisätä 2 asioita sitä. Tämä joukko omistaa nyt opiskelija esineitä. Huomaa, että missään ei minun on sanottava tämä on joukko opiskelijoita. Sanoin se array, ajan. Sitten voi laittaa mitä sen sisällä että haluan. Täällä on 2 objekteja. Lopuksi, minulla on toinen kohde täällä, tämä TF. Yli täällä TF.h periaatteessa sama asia. Olen periä päässä NSObject, ja siten, Kun luot luokat tämä kaikki tapahtuu sinulle, tällainen liitäntä boilerplate. Se on ominaisuus opiskelijoita. Minulla on pari menetelminä, jotka eivät oikeastaan ​​tee paljon, ja niin se tarkoittaa kun olen luoda tätä TF objekti Voin soittaa tätä menetelmää palkkaluokan näin. Kysyttävää Objective-C syntaksi ennen kuin alkavat siirtyä hieman mielenkiintoinen apps kehitys kamaa? Okei, joten katsotaanpa itse tehdä iPhone. Ydin luokkaa, että voit käyttää sisällä iPhonen App kutsutaan näkymä ohjaimet, ja näkymä ohjain pohjimmiltaan edustaa yhdessä näytössä sisällä oman app, joten jos olen musiikin app, esimerkiksi Yhden näkemyksen ohjain voisi olla näkymä, jossa näen kaikki kappaleet minun iPhone. Toinen näkemys ohjain voisi olla kun klikkaa kappaletta ja ala soittaa sitä tai olen poraus alas taiteilijoita. Jokainen näistä eri näyttöjä voitaisiin edustettuina eri mieltä ohjain, ja näkymä ohjain on oikeastaan ​​vain luokka, joka kertoo kuinka tämä näyttö toimii. Asiat sisällä View Controller, aiomme olla ominaisuuksia, joten asioita, kuten painike tulee olemaan omaisuutta mielestämme ohjaimen. Olemme myös menossa on menetelmiä, ja nämä ovat pohjimmiltaan tapahtuman käsittelijät. Tämä menetelmä sanoo, kun painat tätä painiketta Haluan tehdä jotain, ja lopuksi jälleen aiomme käyttää tätä itse avainsanan käyttää nykyisen ilmentymän. Rakentaa rajapintoja iOS on oikeastaan ​​todella, todella helppoa. Heillä on mukava vedä ja pudota-käyttöliittymä nimeltään Interface Builder, ja 2 keskeiset käsitteet johto up your Objective-C Interface Builder ovat IBOutlet ja IBAction. IBOutlet yksinkertaisesti sanoo, että jos julistaa ominaisuus, joka on painike, ja haluat kytkeä se jopa jotain todellista UI, aiot sanoa se pistorasiaan. Samoin, jos haluat edustaa tapahtumakäsittelijän sitten aiot sanoa se kanteen. Todella johdottaa tämä graafinen esitys ja koodi on todella yksinkertaista. Jos haluat liittää IBOutlet, kaikki sinun tarvitsee vain voit hallita click, ja näemme esimerkin tästä todella nopeasti. Ohjaat Napsauta jossa sanotaan View Controller. Olet menossa vetää osaksi käyttöliittymän, tai päinvastoin, Jos haluat kytkeä tapahtumakäsittelijän aiot vetämällä käyttöliittymän toiseen suuntaan. Katsotaanpa katsomaan todella yksinkertainen iOS esimerkki. Luodaan uusi projekti. Aion tulla tänne Sovellus, ja aion valitse Single View Application. Aion klikkaa Next. Annan projektin nimi. Soitan sitä Hei. Kiinnostavaa, Apple luot tuote niin että voit myydä sen ja he voivat tehdä rahaa. Täällä aion sanoa, että tämä on iPhone. Voit luoda iPad, tai jos haluat luoda yksi niistä apps joka tukee molempien laitteiden voit tehdä senkin. Nämä ovat mitä haluat valintamerkit näyttää. Haluat käyttää kuvakäsikirjoituksia, jonka näemme myöhemmin, ja et varmasti halua käyttää automaattista viite laskenta, mikä on mukava ominaisuus, joka estää sinua saamasta sanoa malloc ja free. Ellet halua soittaa malloc ja free, jättäisin tämän kirjattua. Minä sitten seuraavaksi, ja lopuksi, tämä tulee kysyä minulta minne haluan tallentaa sen. Minä lyön luo, ja täällä mennään. Olen luonut uuden projektin. Tänne vasemmalle kaikki tiedostot, jotka ovat sisällä minun hankkeen ja huomaa, että sain koko joukko, ja en edes tee mitään. IOS on suuri. Esimerkiksi täällä ViewController.h, tämä tulee edustamaan minun ensimmäinen View Controller, joten ensimmäinen näytön sisällä minun app. Nyt tiedämme, mitä tämä sanoo. Me sanomme Soitan tämän luokan ViewController, ja ViewController tekee kaiken UIViewController tekee, ja tämä taas on joitakin luokka että Apple kirjoitti, että ei paljon kätevä tavaraa meille kuten näytön näkyviin. Tässä kohtaa voin todella alkaa määritellä mitä mielestäni ohjain ei, ja käy ilmi, että en todellakaan tarvitse tätä. Tämä on boilerplate koodia että Apple antaa minulle ilmaiseksi. Tein tarvitaan että ensimmäisellä rivillä, tai en ole luokkaa, jotta voimme päästä eroon ja päästä eroon tästä. Okei, joten tämä on minun tyhjä näyttö. Nyt klikkaa tästä MainStoryboard.storyboard, ja tästä se alkaa saada mielenkiintoisia. Tämä on ensimmäinen näyttö minun app. Jos haluan lisätä painikkeen, HTML jouduin luoda painikkeen tunnisteen. Android täytyy luoda painikkeen tunnisteen, mutta iOS jos olen juuri tullut tänne oikeaan alakulmaan ja jos minä klikkaa tästä 3rd yksi täällä, jossa sanotaan Objects, ja voin vierittää alaspäin, tai voin alkaa etsiä painiketta. Ja katso, nappi, joten jos olen itse vetää ja pudottaa tämän oikeassa, Olen juuri lisännyt painiketta tämän näytön minun app. Jos haluan muuttaa tekstiä, voin kaksoisnapsauta sitä, sanoa jotain Houkuttelemalla tyyliin "Paina minua." Okei, nyt jos juoksen tämän app, joten kääntää se, niin ajaa sitä en osoita toistopainiketta vasemmassa yläkulmassa, ja siellä minun app. En tee mitään, ja sain makea näköinen iPhone. Jos haluan lopettaa sen, voit napsauttaa pysäytyspainiketta koska se on hauskempaa. Sanotaan, että olen todella haluavat jotain tapahtuu kun painan tätä nappia. Voit tehdä, että mitä minun pitää tehdä, minun tarvitsee luoda uusi tapahtumakäsittely tai toimintaa. Tämä tarkoittaa, että minun täytyy luoda jotain menetelmää, jota haluan kutsua kun painan nappia, joten katsotaanpa luoda uuden menetelmän. Olen sisällä ViewController.h. Minun täytyy sanoa, että menetelmä on olemassa. Tarvitsen yhdysmerkin ensin, koska aion olla kutsumassa tämä näkymä ohjaimen. Minun täytyy antaa tämän tyyppinen. Tyyppi tämä tulee olemaan, että IBAction asia näimme aiemmin. Tämä on tapahtumakäsittelijän, joten se tulee palauttaa IBAction, ja tämä on vihje XCode sanoa, että tämä on jotain haluan lanka jotain. Voin antaa sille nimi, kuten buttonPressed, puolipiste. Nyt olen ilmoittanut uuden menetelmän sisällä oman luokkani. Olen sanonut tämän menetelmän on olemassa. Nyt tulevat ViewController.m, ja sanotaan mitä tämä menetelmä voi tehdä. Jos aloitan kirjoittamalla, esimerkiksi (void) buttonPressed ilmoitus Xcode on todella mukavaa ja autocompletes minulle. Se on todella hienoa. Huomaa tässä, että sisällä. Metrin tiedosto Voin myös sanoa mitätön, ja tämä johtuu siitä, että IBAction ei ole todellisuudessa tyyppiä. Se on oikeastaan ​​hashtag määritelty jossain olla mitätön, ja taas, tämä on vain vihje XCode joka sanoo Haluan tämän olla tapahtumakäsittelijän, ja näemme, miksi vain toinen. Kun tätä painiketta painetaan aion tehdä jotain ärsyttävää kuten näyttää popup. Voit tehdä, että voin luoda uuden esiintymän tämän luokan nimeltä UIAlertView, ja tämä on luokka, että Apple kirjoitti, että on menossa näyttämään ärsyttäviä ponnahdusikkunoita. Me kutsumme tätä popup hälytys, ja minulla on 2 askeleen, muista, luomaan tämän esineen. Ensimmäinen asia mitä tarvitsee tehdä on jakaa tilaa. Haluan UIAlertView. Haluan jakaa tilaa. Se on minun ensimmäinen menetelmä. Minun seuraava menetelmä on haluan alustaa sitä, joten olen näin iso, pitkä menetelmää kutsutaan initWithTitle. Se on pohjimmiltaan tulee valvoa, mitä tämä popup sanoo. Otsikko minun popup voi olla hei. Viestin tämän ikkunan voi olla "Tämä on iOS." Delegate juttu, en tiedä mikä se on. Sanotaan se mitään. Nyt painiketta, joka tulee näkyviin voi sanoa jotain tyyliin "Se varmasti on" enkä todellakaan halua mitään muita painikkeita, joten katsotaanpa poistaa tämä ja sulje kiinnike. Okei, olen luonut ylimääräistä yksi. Siellä mennään. Näin voin luoda uuden popup. Jos haluan todella näyttää popup haluan soittaa Show menetelmällä. Voit tehdä, että voin sanoa hälytyksen ja osoittavat, ja taas, Automaattinen täydennys oli super nice. Jos unohdin mitä se oli, jos olen vain kirjoitettu s, Voin selata täällä selvittää, mitä se oli, ja se suodattaa hienosti. Nyt olen luonut tämän uuden popup. Palaamme siihen, mitä valtuutettu tarkoittaa myöhemmin, ja nyt haluan sanoa Haluan tämän menetelmän potkut kun painan nappia, niin aion tulla takaisin minun kuvakäsikirjoituksen, ja haluan nyt kiinnittää tähän IBAction. Ensimmäinen asia, jonka haluat tehdä, on painiketta. Kun painan tätä nappia haluan jotain tapahtuvan. En aio pidä valvontaa. Aion napsauttamalla ja vetämällä painikkeen yli tänne jossa lukee View Controller. Voimme nähdä, että hienosti syttyy. Jos annan mennä minun hiiri minä nyt tätä ponnahdusikkuna täällä missä minulla on joitakin vaihtoehtoja. Yksi näistä on tapahtumia, että voin rekisteröityä. Nämä ovat kaikki nämä menetelmät I julisti minun h tiedoston IBActions. Näin XCode tietää, mitä pitäisi näkyä tässä pieni luettelo, niin että on vain vihje. Jos minä klikkaa painiketta painetaan, olen nyt rekisteröitynyt tapahtumakäsittelijän. JavaScript jouduimme sanoa joitakin koodin että rekisteröidyt tapahtumakäsittelijän. Objective-C oli todella niin helppoa. Jos minä suorittaa tämän uudelleen Nyt kun painan nappia minun tapahtumakäsittely on menossa ampumaan, ja aion saada tämän ikkunan. Super, super yksinkertainen siellä. Jos joskus haluat nähdä kaikki tapahtumat, jotka sattuvat rekisteröidään on komponentti, jos en klikkaa tätä painiketta ja tulen tänne oikealle puolelle Ensin voit nähdä täällä voin tehdä asioita, kuten tyypin painiketta, joten jos haluat yhden niistä I: n tai Lisää yhteystieto painiketta tai mitä tahansa. Jos haluan nähdä kaikki tapahtumat, jotka ovat tällä painikkeella jos tulen aina tänne oikealle puolelle näemme täällä tapahtumissa minulla on kaikki nämä eri tapahtumissa. Voin painaa nappia, kun päästää painikkeen, kun kaksoiskoskettamalla tai mitä tahansa, ja yksi juuri rekisteröitynyt tämä tapahtuma nimeltä Touch Up Inside, ja tämä sanoo, että niin pian kuin minun sormi irtoaa painiketta Tällöin tulee tulta, ja se on juuri mitä juuri tapahtui. Tämä on tavallaan oletuksena painettuna tapahtuma. Kaikki kysymykset tähän mennessä? Okei, miten voimme alkaa johdottaa asioita meidän koodi osaksi asioita sisällä meidän käyttöliittymän. Muista Ensiksi meidän täytyi vain löytää koodin, ja sitten me läpiladottava käyttöliittymän koodin, ja siellä on ensimmäinen sovellus. Okei, se oli todella siistiä, ja loimme tätä painiketta. Mitä jos emme halua olla luoda joukko ominaisuuksia edustaa näitä painikkeita? Esimerkiksi Tic Tac Toe Olen 9 napit, ja se olis super, super ärsyttävää on vetää ja pudottaa 9 kertaa tai jos jouduin tekemään Tic Tac Toe kanssa 81 eikä 9 ja minun täytyi vetää ja pudottaa 81 kertaa, ja se on ontuva. Mitä me voimme tehdä sen sijaan on paljon, kuten HTML kun meillä oli asioita, kuten tunnukset ja nimet, ja voimme etsiä asioita niiden ID, siellä samanlainen käsite iOS nimeltään tageja. Tunniste on yksinkertaisesti yksilöllisen numeerisen tunnisteen komponentin. Jos Sanon tämän on tunnistetta 0 mm jos luon-painiketta ja anna se tag 0, ja näemme miten tehdä, että vain toinen, jos haluan saada että painikkeen voin vain sanoa haluan soittaa viewWithTag menetelmää kohteen tänne, self.view, joka edustaa nykyisen näytön, esimerkiksi. Jos pyydän että viewWithTag menetelmä, aion vetäytyä painiketta tag 0. Katsotaanpa katsomaan tätä rakennusta Tic Tac Toe. Ensinnäkin, tämä on minun kuvakäsikirjoituksen. Olen luonut nämä 10 UI painikkeita. Huomaa ne ovat kaikki samaa kokoa. Jos painan yksi näistä ja tulen takaisin tänne tällä oikealla puolella näet minun muuttaa fontin täällä, joten tein font hieman isompi, mutta mitä tein myös minä olin asettaa tämän tunnisteen. Sanoin, että tämä on tagi 1, ja se on ylhäällä vasemmalla. Nyt, jos painan toista nappia, kuten tämä toinen täällä, Nyt huomaat, että minun tag on 2. Jokainen näistä painikkeista vain on ainutlaatuinen tunniste, joten tämä on myöhemmin miten aion aloittaa vuorovaikutuksessa minun app. Tämä kaikki on sisällä yksi näkymä ohjain, mutta tässä on mitä meillä on. Meillä on 3 ominaisuuksia täällä. Ensimmäinen ja viimeinen ovat menossa edustaa tilaa minun aluksella. Pohjimmiltaan tämä ensimmäinen on matriisi edustaa joissa XS ja Os ovat. Tämä toinen täällä kertoo kenen vuoro on. Huomaat, että minulla on myös näitä asioita täällä. Ennen kun ilmoitetut ominaisuutensa annoimme heille nimen ja tyypin. Voimme myös antaa heille joitakin lisätietoja täältä. Tämä ensimmäinen sanoo nonatomic, ja mitä tämä sanoo on pohjimmiltaan vain yksi asia koskaan yrittää käyttää tätä muuttujaa kerrallaan. Voisit tehdä monimutkaisempia sovelluksia ovat monisäikeinen, ja niin takaisin Scratch meillä oli eri kierteet, ja eri sprites voisi tehdä eri asioita samaan aikaan. Jos se ei ole asia, jota se ei ole mitään, että me tarkastelemme, jos sanomme nonatomic se todella aikoo tehdä asioita hieman nopeammin. Meillä on myös tämä asia sanottu luovuttaa, vahva tai heikko. Tämä osoittaa vain sanoo, että tämä on tavallinen tyyppi. Tämä ei ole esine tai osoitin, koska tämä on vain bool, joten bool on rakennettu Objective-C. Tämä kertoo älä yritä tehdä mitään fancy osoittimet täällä. Se on tavallinen vanha skaalain. Vahva ja heikko, tämä heikko kertoo, että todellisuudessa Haluan tämän voidaan osoittaa jotain mieltä ohjaimen. En aio itse jakaa tai init tämän itselleni. Interface Builder, kun ajaa app, tulee hoitaa kaiken alustusta. Jos sanon heikko, että sanoo joku aiotaan luoda tähän. Jos sanon vahva, tämä sanoo, että aion olla yksi joka on luomassa board esine, joten tässä olen hieman menetelmänä, esimerkiksi kanteen, kun uusi peli-painiketta painetaan, kanteen, kun jokin muista painikkeista painetaan, ja jne.. Emme pääse liikaa logiikkaa Tic Tac Toe, vaikka se on hyvin jännittävää, mutta katsotaanpa katsomaan joitakin asioita, joita voimme tehdä sisällä iOS. Tämän uuden pelin menetelmä potkut kun painan uusi peli painiketta. Kytkeä että jopa minä yksinkertaisesti tulla minun kuvakäsikirjoituksen. I napsautti uuden pelin. Jos tulen tänne oikeaan näen että Kosketa Up Inside on kytketty newGame menetelmällä. Siksi tämä on menossa potkut. NewGame menetelmä aikoo tehdä joitakin perustaa. Se tulee sanoa Haluan sinun tyhjentää tilaa aluksella. Tämä on mukava tapa on epävakainen taulukot. Tämä tulee sanoa se nyt X puolestaan ja nyt aion hyödyntää tätä viewWithTag juttu. Tiedän, että minun painikkeilla on tunnisteet 1-9, ja se on jotain mielivaltaisesti poimittuja. Jos haluan asettaa tekstin jokaisesta painikkeesta tyhjä koska olen juuri aloittanut uuden pelin, ja en halua mitään Xs tai Os jättää yli pystynkö tähän. Voin sanoa haluan mieltä tagilla, 1, 2, 3, 4 jne.. Tämä vetää erilaista nappia joka kerta. Täällä aion heittää sen UIButton. Aivan kuten voisimme heittää ints on kellukkeet ja päinvastoin Tämä sanoo, että haluan heittää tämän UIButton. Tämä tarkoittaa, että tyypin tämä on UIButton * koska osoittimia, mutta älä huoli, he eivät pelottavia enää. Kun olen tätä painiketta aion kutsua menetelmää sen. Tätä menetelmää kutsutaan setTitle forState, ja niin tämä kertoo Haluan asettaa tekstin painikkeen olla tyhjä merkkijono, ja haluan sen olevan tyhjä merkkijono, jos se ei paineta. Jos olen tällä menetelmällä, voin vaihtaa tekstin painikkeen heti kun joku osuu siihen, mutta haluamme sanoa, kun painike on vain istuu siellä Haluan tekstin olevan tyhjä. Lopuksi, me aiomme alustaa minun aluksella, ja aion sanoa, että kaikki on tällä hetkellä 0, joten hallituksen jäsenet muuttumaton on vaihteleva joukko, mikä tarkoittaa, että voin soittaa addObject menetelmä ja vain 0 sisälle. Se mitä tapahtuu, kun luon uuden pelin. Katsotaanpa katsomaan toiseen. Tämä menetelmä tässä on IBAction joka tulee painaa aina yksi niistä neliöt painetaan. Nyt meillä on Tic Tac Toe logiikkaa täällä. Me selvittää, kenen vuoro on, ja perustuu siihen, että me joko asettaa X-tai O, mutta huomaa että olemme uudelleenkäyttö saman tapahtumakäsittelijää joka ikinen yksi niistä painikkeilla. Tämä tarkoittaa sitä, että minulla ei ole menetelmää vasemmassa yläkulmassa painike, eri tapaa alhaalla oikealla painikkeella, vaikka olisin voinut tehdä sitä. Se ei todellakaan olisi hyvä suunnittelu. Mitä teen tässä olen todella menossa määrittää mitä tag painiketta, joka painettiin on. Huomaat, että tämä näytelmä menetelmä ottaa yhden argumentin. Sitä kutsutaan lähettäjän ja mitä lähettäjä on on lähettäjän tulee edustavat mitä oli ryhtynyt toimiin heti. Jos painan nappia, tämä lähettäjän tulee olla, että UIButton että olen itse puristettu, niin se tarkoittaa, että UIButton on tag koska olen luonut tunnisteen. Jos haluan saada at tag voin yksinkertaisesti sanoa Haluan tunnistetta lähettäjän, ja taas, olen juuri valettu sen UIButton. Satun tietämään, että lähettäjä on UIButton. Se ei aina tarvitse olla UIButton. Voisin esimerkiksi rekisteröidä saman tapahtumakäsittelijän  ja yksi painike, yksi liukusäädintä. Tässä tapauksessa tiedän ne kaikki painikkeet, joten aion sanoa Haluan tämän olevan painiketta ja sitten saan tag, ja tag nyt tiedän missä olen sisällä aluksella. Sitten voi yksinkertaisesti asettaa joko X tai O, voi kääntää puolestaan tarkistaa, kuka on voittanut, jne.. Kysyttävää tästä toistaiseksi? Okei, kaikki koodi me lähetetty verkossa-emme halua päästä liikaa on Tic Tac Toe logiikkaa, mutta nyt voit nähdä, että todella Kaikki me teemme on me looping tänä array, joten meillä on pari silmukoita täällä, ja me vain vertaamalla nähdä meillä ottelun kaikki rivit, ottelu sarakkeen tai mitään sellaista. Todella ajaa tätä app, jos painat jotakin näistä painikkeista että näytelmä menetelmä oli ammuttu, niin se tarkoittaa, että olen vain asettaa painiketta on X, joten nyt tätä painiketta on O, ja niin edelleen, ja niin se miten olemme alkaneet vuorovaikutuksessa tämän yhden sivun sovellus. Lähetämme koodin, joten voit tutkia, että mutta katsotaanpa nyt puhua joitakin apps, jotka ovat enemmän kuin vain yhden sivun. Niin jännittävä kuin Tic Tac Toe oli paljon apps sisällä iOS ovat tavallaan nämä porautua asioita useita näyttöjä. Ensimmäinen ajatus, että meidän täytyy puhua ovat protokollia, ja protokolla on yksinkertaisesti joukko menetelmiä että voit luvata määritellä. Jos luon uuden pöytäkirjan kanssa 2 menetelmin, tämä ensimmäinen, jos paluu tyyppi on mitätön, kutsuin sitä foo. Siinä ei argumentteja. Minulla on toinen tapa. Se palauttaa int. Kutsuin sitä estää, ja se kestää yhden argumentin. Kaikki tämä protokolla on, että kutsutaan SomeProtocol täällä, Tämä on joukko asioita, joita joku voi toteuttaa. En ole sisälle tämän pöytäkirjan sanoi mitä foo tekee. Sen sijaan sanon vain voisitte määritellä foo jos haluat. Jos Luon View Controller tai luoda luokka Voin sisällä tämän luokan lupaus toteuttaa jotkut näistä menetelmistä, joten jos esimerkiksi sanoa Tämän nyt sanoo Teen lupauksen, että sisällä Tämän näkemyksen ohjaimen luokan joudun määritelmät sekä foo ja bar. Miksi se hyödyllistä? Paljon osien sisällä iOS hyödyntää tätä suunnittelumalli kutsutaan valtuuskunta, ja mitä valtuuskunta sanoo on, että esimerkiksi, jos minulla tekstikenttään ja joitakin tapahtumia, jotka voitaisiin rekisteröidä sisällä minun tekstiruutuun kuin luoda erillisiä tapahtumia, mitä voin tehdä, on voin sanoa edustaja tämän tekstikenttään tulee jonkun esineen. Kun sanon, että tämä on edustaja nyt se tarkoittaa, että kun jokin tapahtuma olisi ammuttu tekstikenttään eikä sen rekisteröinti tai jotain sellaista se vain tulee kutsua menetelmää edustaja. Esimerkiksi sisällä minun tekstikenttään olen menetelmä, kun painan että tehdään painiketta oikeassa alakulmassa, ja niin kuin rekisteröitymättä tapahtumakäsittelijä mitä voin sanoa on tekstikenttään, tässä on objekti, haluan sinun soittaa menetelmää aina joku painaa valmis-painiketta, ja se tarkoittaa, että kohde on toteuttaa joitakin protokollan joka sanoo Lupaan määrittää, että tehtävä-painiketta toiminta, koska jos se ei määrittele, että menetelmä ja painat Valmis, niin se tulee olemaan sekava. Katsotaanpa katsomaan esimerkki. Tässä olen vain yksi tekstiruutuun ja yksi ominaisuuksista tekstikenttään tänne tällä oikealla puolella on edustaja. Tämä on luokan ominaisuus. Mitä tein tässä on minun kontrolloida napsautetaan, ja raahasin tämän paikan tänne sen mielestä ohjain, ja joka sanoo nyt edustaja tämän tekstikenttään tulee olemaan näkymän ohjain. Tämä tarkoittaa sitä, että kun jotkut toimia tapahtuu sen sijaan, että rekisteröitymättä erillinen tapahtumakäsittelijät haluan sinun lähettää ne edustajalle. Nyt katsomaan mielestäni ohjain. Sisällä. H tiedosto Olen tehnyt lupauksen. Olen luvannut toteuttaa joitakin menetelmiä sisällä tämän pöytäkirjan kutsutaan UITextFieldDelegate, ja jälleen, tämä on vain joitakin lista asioita, joita en voi halutessaan panna täytäntöön. Jos tulen tänne minun. M-tiedosto, olen toteuttanut yhden tällaisen menetelmän. Olen kutsunut sitä textFieldShouldReturn koska sitähän se oli nimeltään sisällä protokollaa. Ja nyt kun painan painiketta Valmis sisällä että tekstikentän Tämä on mitä menossa nimeltä, joten en rekisteröidä tapahtumakäsittelijän. Olen liittänyt edustaja, ja kun tämä tapahtuma on ammuttu Tämä on menetelmä, että saavat kutsutaan, joten jos tulen tänne minun kuvakäsikirjoituksen ja suorita se- Vaikka se latautuu voimme nähdä, mitä tämä tekee. Minun näytöllä olen 2 asioita. Olen tämän tekstikenttään ja minulla on tämä etiketti. En yksinkertaisesti sanomalla haluan tekstin tämän merkinnän on yhtä suuri kuin mitä käyttäjän kirjoitettu sisällä tekstikenttään. Tämä seuraava rivi tässä on yksinkertaisesti menetelmä, soitan tekstikentässä sanotaan haluan sinun piilottaa näppäimistön. Tämä on vain mielivaltainen tapa, että Apple valitsi. Jälleen ennen tein mitään jouduin lanka kaiken ylös, joten tulin tänne. Alkaen View Controller vedän yli tekstikenttään. Annoin mennä, ja näen täällä, että voin tehdä tämän tekstikenttään omaisuus koska täällä on näkymä säätimen olen määritellyt kiinteistön , joka on IBOutlet on tekstikenttään. Tämä sanoo, että voin wire Tämä ominaisuus ylös jotta tekstikenttään minun UI. Nyt kun klikkaa tästä voin aloittaa kirjoittamisen. Nyt jos painan tehnyt painiketta tämä tulee palo Jos voin nyt vastata. Ei tapahtumakäsittelijät. Niin minä vain vastannut, että Valmis-painiketta. Järkeä? Tämä ei ole suunnittelumalli, joka-et ehkä koskaan löytää itsesi luoda oman protokolla, mutta vain tietää, että jotkut Eri iOS komponentteja rekisteröityä tapahtumia eri tavoin. Painikkeet, esimerkiksi käyttää niitä IBActions. Teksti kentät, toisaalta, eivät aio käyttää edustajaa. Voimme nähdä ja voit katsoa kaikki, että jopa sisällä asiakirja. Muuten, siellä oikeastaan ​​ton UI juttuja rakennettu iOS sinulle, niin esimerkiksi niin tein, jotka sanovat tehty oikeassa alareunassa on Olen valinnut tähän kenttään. Tulin tänne. Olen vieritetty hieman palata avain, ja voin itse tehdä tästä koko joukko asioita, kuten jos haluan että sanoa hätäpuhelun sijaan voin tehdä sitä, mikä on täysin satunnainen, ja en tiedä miksi siellä sisäänrakennettu hätäpuhelun painiketta, mutta siellä, se sanoo hätäpuhelu todella pieniä kirjaimia. Siellä mennään. Ehdottomasti tutkia kaikkia näitä eri vaihtoehtoja iOS. Kysyttävää edustajat? Jälleen vain mielenkiintoinen suunnittelumalli, että sinun pitäisi olla tietoinen. Okei, seuraavaksi katsomaan pöydän näkemyksiä. Taulukko näkymä on pohjimmiltaan siitä, että luettelo kohteista, jotka on kaikki yli paikka iOS. Kun olet selailee kaikki yhteystiedot, etsit asettaa sivun, ja sellainen lista asioita kutsutaan pöydän näkymä. Toteuttaminen taulukkonäkymää iOS on melko yksinkertainen. Sen sijaan, että luokan, joka laskeutuu, että UIViewController kuten olemme tehneet aiemmin, vaan meidän pitää sanoa kuin kaiken UIViewController ei haluan tehdä, Sanon kaiken UITableViewController ei haluan tehdä, niin että yksinkertaisesti lisätään joitakin uusia asioita, jotka ovat täysin tehnyt meille. Meidän täytyy tehdä hyvin vähän periaatteessa täytä tyhjät sisällä pöydän. Jotta näyttää taulukon minun täytyy vastata joihinkin kysymyksiin. Ensimmäinen kysymys minun täytyy vastata, kuinka monta osaa on taulukossa? Kun olet selailee yhteystiedot app huomaat että se on eräänlainen järjestämä Kuten, niin sinulla on Bs, ja sinulla on se pieni osa otsikkoa. Kukin näistä kutsutaan osassa. Saatat tai ei ehkä tarvitse näitä. Ensimmäinen asia mitä sinun tarvitsee tehdä on toteuttaa menetelmä kutsutaan Tableview: numberOfSectionsInTableView. Se yksinkertaisesti palauttaa kuinka monta osaa sinulla on, joten voisi sanoa palauttaa yhden jos sinulla on yksi iso pöytä näyttö. Seuraava kysymys, että iOS tarvitsee tietää kuinka monta riviä sinulla on? Esimerkiksi, olet selailee taulukko näkymä. Sinulla on kiinteä kappaleita etsit tai kiinteän määrän kontakteja. Jos olet minulle, tietenkään, ei ole kovin paljon, ja niin se miten iOS tietää kuinka monta solut näkyviin. Jälleen kerran, tämä voisi sanoa jotain tuottoa 3. Oma pöytä näkymä on 3 riviä. Lopuksi, iOS tarvitsee tietää, mitä kukin solu näyttää, niin mitä se todella aikoo tehdä, on kutsua tätä menetelmää tänne, Tämän Tableview: cellForRowAtIndexPath. Se tulee kutsua tätä menetelmää joka ikinen solu sisällä pöydän. Miten se tietää, kuinka monta kertaa sitä kutsua? No, sinä kerroit sen sisällä rivien jaksossa. Me aiomme kutsua tätä jokaiselle meidän solut, ja sisällä tämä on, jossa voit itse tehdä asioita, kuten aseta teksti tai kertoa, mitä se pieni sininen painike oikealla puolella ei. Malli saada nämä solut, aiomme käyttää tätä menetelmää kutsutaan dequeueReusableCellWithIdentifier. Objective-C on todella hyvin tunnettu naurettava pituudesta menetelmän nimiä, ja tämä on todella mukava esimerkki esimerkki. Mitä tämä tapa on tämä sanoo vain haluan sinun antaa minulle solu. Vain iOS juttu. Jos sinulla on jotain 100000 kappaleita iPodissa Mitä iOS ei halua tehdä, on jakaa 100000 soluja, koska jos olet yläreunassa listasi, oletteko todella tarvitse varata muistia solulle, joka on 99000 riviä alas? Ei, koska kuten olet selaamalla voit eräänlainen jakaa matkan varrella. Tämä on sinulle tehnyt. Sinun ei tarvitse huolehtia kaikki tyhmä suorituskykyä kamaa. Kaikki te sanotte on soitat tätä menetelmää dequeueReusableCellWithIdentifier, ja tämä sanoo, okei, jos haluat aion luoda uuden solun sinulle. Mutta jos olet alareunassa taulukon ja olet jo myönnetty joitakin soluja yläreunassa taulukon että et todellakaan ole menossa lähiaikoina Aion antaa teille yksi niistä takana sijasta kohdentaa uuden, joten tämä on mukava suorituskyky huolenaihe. Sinun ei tarvitse jakaa solut itse. Se tulee antamaan sinulle takaisin soluun. Se tulee takaisin sinulle soluun objekti. Kun olet solu objekti voit tehdä juttuja siihen. Voit määrittää tekstin solun tämä ominaisuus nimeltä tekstistä. Voit lisätä että nuoli oikealle tai jokin muu satunnainen juttuja Tämän muuta omaisuutta nimeltään accessoryType, ja niin edelleen ja niin edelleen. Katsotaanpa katsomaan todella täytäntöön pöytänäkymän nyt. Kun olen luonut tämän hankkeen mieluummin kuin sanomalla yhden näkymän sovellus Olen itse tullut tänne isäntä-yksityiskohtia sovellus, joten periaatteessa tämä vastaa postin app iPadin kanssa pöydän näkymä vasemmalle ja sitten sisällön oikealla. IPod tai iPhone tämä tulee vastaamaan yhden pöydän näkymä. Siellä sain käynnistin koodi. Katsotaanpa ensiksi katsomaan kuvakäsikirjoituksen. Kaikki tämä tehtiin minulle, pohjimmiltaan luotu. Tämä navigointipalkin näytti mitä esimerkiksi solu voisi näyttää, ja voin kaksoisnapsauta tämän muuttamalla otsikko. Kaikki muut UI huolenaiheet pärjään siellä. Header tiedosto näyttää todella yksinkertaista. Sen sijaan sano tätä UIViewController me nyt sano tätä TableViewController, joten tiedämme, että haluamme kutsua kaikki pöydän menetelmät. Seuraavaksi haluan luoda omaisuutta, joka tulee edustamaan asioita sisällä minun pöydän. Tämä taulukko on menossa mielivaltaisesti näkyviin lista hedelmiä, joten minun täytyy luoda joitakin array jossa voin lisätä hedelmiä. Sisällä minun täytäntöönpanon tiedoston ensimmäinen asia jonka haluan tehdä on haluan varmistaa minun alustaa tämän array. Sanoin alloc init, loin hedelmät array, ja olen lisäämällä 4 asioita se, joista yksi on paljon kiistanalainen kuin muut 3. Ja nyt minulla on erilaisia ​​kooltaan 4. Olemme tuoden sen CS50. Minulla on nyt joukko kooltaan 4. Nyt aion aloittaa vastaamalla näihin kysymyksiin, ja oikeastaan kun olen luonut tämän app tämä oli jo minulle. En tarvitse kirjoittaa pois useita kohtia taulukon näkymässä. Se oli jo siellä, ja olen täyttämällä tyhjät. Kuinka monta osaa minulla on? Yksi. Kaikki tehty. Montako riviä minulla on? No, minulla on yksi rivi jokaista hedelmää, joten tämä määrä on omaisuutta tahansa array, joka sanoo miten iso se on? Niin monta riviä olen. Lopuksi minun täytyy sanoa mitä kukin solu näyttää? Aion sanoa dequeueReusableCellWithIdentifier. Jälleen kerran, tämä oli jo kirjoitettu minulle. Minun ei tarvinnut tehdä tätä itse, ja haluan saada takaisin tämä solu tässä paikassa. Muista, että olemme kutsuneet tätä samaa menetelmää jokaisesta solusta, ja tämä argumentti täällä, tämä indexPath väitettä, sanoo mitä rivi Olen mukana Jos sanon indexPath.row tänne tämä on 0, niin se on 1, niin se on 2, ja tämä on niin tiedän mitä solu Olen tällä hetkellä näyttää. Haluan asettaa tekstin solun käyttämällä tätä textLabel kiinteistö mennä sisälle minun hedelmiä array ja saada vastaava kohde jokaisen rivin. Jos tämä on merkkijono, olen nyt asettaa Tekstin omaisuuden merkkijono. Voin tehdä yksi asia. Voin myös rekisteröidä tapahtumakäsittely kustakin soluja, joten kun napauta kutakin näistä soluista tämä didSelectRowAtIndexPath, tämä tulee kutsua minua, niin yksinkertaisesti määritellään tämä nyt voin käsitellä mitä tapahtuu Kun napautat solun, ja jälleen olemme ohimennen jossa solu oli painanut jotta voimme uudelleen tätä samaa tapahtumakäsittely kaikille meidän solut. Jälleen, tämä on jotain iOS tekee minulle. Mennään näyttämään toisen ärsyttäviä popup että yksinkertaisesti sanoo nostit jotain jos se jotain tulee olemaan rivi objekti. Kun olen suorittanut tämän, aion olla tässä mukava pöytänäkymän yksi rivi kutakin näistä hedelmistä, ja jos minä napauta yhtä se kertoo minulle mitä tapahtui. Järkeä? Katsotaanpa rakentaa hieman monimutkaisempi ja app, niin paljon kuin klikkaamalla nostit tomaatti on. Kiva osa noin kuvasuunnittelu ei se ole vain auta meitä suunnitteluun näytöt erikseen, se myös aikoo auttaa meitä sitoa yhteen koko app, joten lopullinen app tulemme rakennus on tämä mukava urheilu uutistenlukijan, ja niin se tulee olemaan useita näyttöjä, joten voin todella edustaa kukin näistä useista näytöt kuvakäsikirjoituksen ja voin loitontaa ja nähdä minun app korkea. Jotta voidaan luoda uuden elementin sisällä minun kuvakäsikirjoituksen se on todella yksinkertainen sisällä Interface Builder. Jos haluan lisätä toisen näytön tähän, esimerkiksi En voi ensin loitontaa nipistämällä zoom että Apple rakastaa niin paljon, ja täällä ennen kuin voin hakea painikkeen ja minä vedä ja pudota-painiketta jos haluan luoda uuden näytön voin oikeastaan ​​vain vetää ja pudottaa koko näkymä-ohjain, joten jos otan tämän, vedä se tänne, Hei, siellä on toinen näyttö, joten nyt käyttää tätä samaa kuvakäsikirjoituksen tiedosto Voin olla kaikki näytöt sisällä minun app, ja voin loitontaa ja miten ne vaikuttavat toisiinsa. Nämä eivät ole vuorovaikutuksessa vielä. Miten nämä 2 näyttöä vuorovaikutuksessa on määrittelet suhteita. Voit periaatteessa sanoa tämän näytön, kun painat tätä painiketta, Haluan sinun liukumaan tähän uuteen näyttöön. Se tarkoittaa, että on tällainen suhde  ensimmäinen näyttö ja toinen näyttö. Sinulla on pohjimmiltaan nuoli että painiketta toinen näyttö sanomalla, että kun painat tätä painiketta siellä minä haluan mennä. Aivan kuten me hallitsemme napsautetaan ja raahasivat määritellä näihin myyntipisteisiin aiomme tehdä sama asia määritellä näitä segues. Näemme esimerkin tästä, ja ennen varsinaista siirtymistä yhdeltä näytöltä toiselle iOS on ystävällisesti kutsua tätä menetelmää kutsutaan prepareForSegue, ja tämä on silloin voimme aloittaa lähettää tiedot yhdestä sovellus toiseen. Esimerkissä aiomme katsoa se pohjimmiltaan voimme suodattaa baseball joukkueet jotka liigoja ja divisioonien. Kun valitsen liiga, esimerkiksi haluan siirtyminen minun seuraava näyttö, jossa voin näyttää kaikki toimialat että liigassa tai kaikki erilaiset joukkueet. Minun täytyy lähettää että näyttöön mitä joukkueita sinun pitäisi näyttää. Voit tehdä, että aion hyödyntää tätä menetelmää. Lopuksi vain satunnainen piste iOS. Jos haluat tallentaa tietoja on tämä asia sanottu ydintiedot, joka on oikeastaan ​​eräänlainen hankala työskennellä. Voit myös käyttää SQL tallentaa tietoja, joka taas on mukava mutta sellaista on monimutkaisempi puolelta työskennellä, mutta iOS tukee myös näitä todella hienoja asioita kutsutaan omaisuuden luettelot, ja kiinteistö lista on vain tiedosto, joka edustaa avain arvo-pareja. Voit määrittää luettelon avaimet, ja te sanotte tämän avaimen tulee olemaan array. Tämä avain tulee olemaan merkkijono, ja periaatteessa mitä voit tehdä JSON voit tehdä sisällä kiinteistön listalle ja niin tämä todella hienosti antaa meille mahdollisuuden työskennellä joitakin tietoja. Esimerkiksi minulla on tämä Teams.plist että olen luonut. Olen luonut uuden plist tiedoston, ja voin porautua. Tämä on sanakirja, tämä on sanakirja, nämä ovat merkkijonoja, joten tämä on mukava graafinen esitys JSON asiakirjan tai vain joukko keskeisiä arvo-pareja, joten tämä on tieto, että otan työskennellä sisällä minun app. Katsotaanpa ensin tullutta tänne. Meillä on paljon enemmän tiedostoja nyt. Mutta katsotaanpa ensin tullutta tänne kuvakäsikirjoituksen. Storyboard täällä, jos en voi loitontaa- nyt voimme nähdä, että tämä on virtaus minun app. Olen ensimmäistä aio aloittaa tällä näytöllä. Aion porautua tähän näyttöön, ja aion porautua tähän näyttöön, ja voimme nähdä täällä, että jos sellainen siirtää yhden näistä noin olemme nämä nuolet kulkevat tästä tänne, ja niin minä määrittää, että nuoli oli jos olen zoomata vähän, ja jos tulen yli tämän näkemyksen ohjain, ja tässä on solu, ja haluan sanoa, että kun napautat solun Haluan sinun liukua toiseen näyttöön. Voin yksinkertaisesti pidä ohjaus, vieritä hieman pitämällä ohjaus, vedä tämä solu yli ja anna mennä. Ja täällä sanomme mitä siirtymä, jota haluat käyttää? Haluatko käyttää dian asia kutsutaan push? Haluatko liukua ylös pohjasta? Sitä kutsutaan modaalinen. Ja kun minä sitten yksi näistä, se tulee tehdä tämän nuolen minulle, ja se tarkoittaa, että olen oikeastaan ​​käsitellä mitä tapahtuu, kun painat tätä painiketta graafisesti. En kirjoittaa koodia todella liukua yhdeltä näytöltä seuraavaan. Olen määritellyt tässä visuaalisesti sisällä Interface Builder. Jos minä klikkaa tästä nuolta, voimme nähdä, että annoin tämän asian nimi. Kutsuin sitä showDivisions, ja tämä on niin, että voin tietää Mitä siirtyminen on alkamassa, ja näemme, miksi vain sekunnin. Niin olen läpiladottava näyttöihin minun app. Jos tämä olisi painiketta, esimerkiksi sen sijaan, että pöytä näkymä, Voisin valvoa klikkaa painiketta, vedä yli seuraavaan näyttöön, ja näin voin tehdä navigoinnin näin. Todella nopeasti, jos pääsemme MasterViewController, uudelleen, me yksinkertaisesti menossa määritellä lista asioista joka näkyy taulukossa mieltä. Täällä Sanon haluan sinun ottaa plist tiedoston, ja haluan sinun ladata sen ylös sanakirja, ja kun olet että sanakirja, aion vastata näihin samoihin kysymyksiin uudestaan. Tässä on useita kohtia. Yksi, on yksi rivi jokaista liiga, ja teksti kunkin solun tulisi olla joko ensimmäinen, ensimmäinen liiga, toinen liiga, ja niin edelleen. Lopuksi aion käyttää tätä menetelmää Juuri näkemämme nimeltään prepareForSegue, ja tämä on tapa, joka on potkut, kun painan yksi niistä riveistä ja siksi aktivoimalla että siirtyminen että olen perustanut nuolilla. Tämä sanoo, että en voi olla useita suhteet yhdeltä näytöltä toiselle. Jos minulla on 2 painiketta ja jokainen painike vie sinut eri näyttöön Aion olla 2 segues, 1 kutakin painiketta. Mutta tämä prepareForSegue on jälleen olemaan uudelleen kunkin eri suhteita, niin se tarkoittaa, että minun on tapa tunnistaa jos painat ensimmäistä painiketta tai painat toista näppäintä. Muistatko kun annoin että SEGUE nimi, tämä showDivisions, Niin minä nyt tiedän, että tämä on SEGUE joka aktivoitu. Kaikki mitä haluan tehdä on haluan sanoa Haluan selvittää, mitä painaa, ja niin saada, että voin sanoa haluan indexPath valitun rivin Muistan indexPath sanoo vain missä olen juuri napsautetaan, ja sitten haluan sanoa Haluan selvittää minne olen menossa. Tämä destinationViewController, että on ominaisuus SEGUE. Tuo näytön aion, joten tiedän, että näytön aion kutsutaan DivisionsViewController koska olen luonut tämän luokan joten nyt jos sanon d.divisions Olen nyt asettaa ominaisuuden View Controller aion mennä. Näin minä lähetän tiedot yhdeltä näytöltä toiseen näyttöön. Vain katsomalla tätä DivisionsViewController voit nähdä täällä että. h tiedosto on, että omaisuutta rajapintoja, ja sitähän olen periaatteessa asuttavat, joten tiedän, että olen näyttämällä divisioonien vastaava liiga, että olen napsautti, ja jälleen, todellinen taulukkonäkymää näyttää melko paljon samaa, vain vastaamalla nämä 3 yksinkertaisia ​​kysymyksiä sekä tunnistaa Mitä tapahtuu, kun siirryt seuraavaan näyttöön. Vain pari muita asioita täällä. Huomaat huipulla tässä, että mieluummin kuin sanomalla # include Olen nyt sanoa # tuoda. Tämä on vain Objective-C juttu. Tuonti on pohjimmiltaan arka versio sisältyy ja esimerkiksi meidän on tiedettävä, mitä tämä luokka on, joten en voi sanoa DivisionsViewController. Jos emme hashtag standardio.c sisällä meidän. C tiedosto kääntäjä ei ollut aavistustakaan mitä printf oli. Vastaavasti jos en tuoda DivisionsViewController kääntäjä todellakaan ole aavistustakaan, mitä DivisionsViewController on. Varmista vain, että sisäpuolelle eri. M. tiedostot varmista tuoda vastaava. h tiedostot niin, että kääntäjä tietää missä mennään. Lopuksi, mitä Apple lopulta se on näyttää joitakin tietoja käyttämällä web näkymä, ja niin web näkymä on esine, jossa voit upottaa hieman selaimen sisällä App. Kaikki mitä sinun tarvitsee tehdä, on syöttää URL selaimessa joten haluan mennä mlb.mlb.com, ja näin voin avata kotisivun jokaiselle joukkueen, ja näin ohimennen tässä URL Web View voi näyttää tämän minulle, ja voin selata noin, ja simulaattori on käytössä, että yksi. Nyt tämä tuli minun plist. Jos painan tätä tämä myös tuli minun plist, ja tämä liukuva käsiteltiin määrittelemällä ne segues. Olen napsauta tätä ja yksi enemmän, ja nyt on minun UIWebView, joten vain noin tässä verkkosivuilla URL juuri upotettu, ja minun ei tarvinnut käsitellä mitään hullua. Näin näyttää web-sivun. Asiat kuten tämä paluupainiketta täällä myös antanut minulle täysin ilmaiseksi, koska olen määritellyt nämä suhteet käyttäen segues. Kysyttävää? Joo. [Student] Joten kun käytät alloc, sinun ei koskaan tarvitse ilmaiseksi mitään? Aivan, kun soitat alloc ja init sinun ei tarvitse vapauttaa sitä. IOS tulee käsitellä kaikki tämä teille. Se on ihana, ja et rikkomatta mitään sääntöjä. Joo. [Opiskelija] Jos olisit sisällyttää enemmän joukkueita että mahtuisi näytölle, Olisiko automaattisesti siirry vaihtoehto, vai onko se jotain, sinun täytyy lisätä? Aivan, jos minulla olisi enemmän joukkueita, esimerkiksi se automaattisesti käsitellä vieritys minulle, ja kaikki suorituskykyyn huolenaiheet valtava taulukon hoidetaan myös täysin minulle. Muita kysymyksiä? Kaikki tämä koodi tullaan lähetetty. Meillä sellainen tasapaksuja hieman enemmän pieniä yksityiskohtia, mutta asiat kuten asettamalla joitakin ominaisuuksia web näkymä ovat vain asioita, jotka voit saada selaamalla Applen dokumentaatio, joka on todella, todella hienosti säädettyihin. Heillä on paljon näytteen apps ja esimerkiksi käyttötarkoituksissa eri API, joten ehdottomasti tutustua näihin jos voit. Vain joitakin hyödyllisiä linkkejä kannattaa vilkaista. Nämä ovat joitakin käteviä asiakirjojen oppaita. URL-osoitteet ovat massiivisia, joten he lyhentää. Tämä ensimmäinen on koko kirjaston dokumentaation. Ei ole juurikaan hakupalkit, joten jos aloitat kirjoittamisen painiketta se alkaa antaa sinulle kaikki tiedot mitä kaikkea voit tehdä painikkeen. Olen myös Table View Programming Guide. Se käsittelee taulukko näkemyksiä paljon yksityiskohtaisemmin, miten tehdä asioita, kuten dynaamisesti lisätä soluja tai muokata soluja tai poistaa niitä. On paljon näytteen apps Applen että näyttää, miten tehdä se, ja lopuksi, tämä viimeisin on Human Interface suuntaviivojen ja tämä on periaatteessa verran keskusteltiin UI osia, asioita, kuten eivät tee nappi, joka on 4 pikseliä 4 pikseliä. Se huono idea, ja muita asioita, jotka Apple haluaa sinun tekevän edistää hyvää suunnittelua. Mahdolliset viimeisen kysymyksiin ennen kuin loppuun asti? Selvä, varmasti rohkeasti-Olemme menossa on erityisiä etikettejä keskustella. Saamme iOS yksi, joten varmasti vapaasti hyödyntää sitä. Jos haluat työskennellä oman luokkatovereiden hankkeita tai auttaa selvittää joitakin satunnaisia ​​iOS juttuja rohkeasti sähköpostia minulle, ja varmasti tutkia kaikki koodi verkossa, koska juuri edun aika sellaista tasapaksuja enemmän tarkemmin, yksityiskohtia asioita. Mutta jos ei, niin onnea teidän iOS projekteja, ja toivon meidän iso tulva App Storesta. [CS50.TV]