First Trinn med UIKit
3
Del
3
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert å bare $ 3. Ikke gå glipp av.
Dette innlegget er en del av en serie som heter Lær iOS SDK Development Fra Scratch.Exploring stiftelsen FrameworkTable Vis Basics
UIKit er rammen som du vil finne deg selv bruker oftest ved utvikling av iOS-applikasjoner . Den definerer de viktigste komponentene i en iOS-applikasjon, fra etiketter og knapper til bord synspunkter og navigasjon kontrollere. I denne artikkelen vil vi ikke bare starte vår utforskning av UIKit rammeverk, vil vi også utforske innvendige av en iOS-prosjektet og de grunnleggende byggesteinene i iOS-applikasjoner.
Hva er UIKit rammeverk?
Mens Foundation rammeverket definerer klasser, protokoller og funksjoner for både iOS og OS X utvikling, UIKit rammeverket er utelukkende rettet mot iOS utvikling. Det er tilsvarende den Application Kit eller AppKit rammeverk for OS X utvikling.
Som Foundation definerer UIKit klasser, protokoller, funksjoner, datatyper, og konstanter. Den legger også ekstra funksjonalitet til ulike Foundation Classes, for eksempel NSObject, NSString, og NSValue gjennom bruk av Objective-C kategorier.
Objective-C kategoriene er en praktisk måte å legge ekstra metoder til eksisterende klasser uten trenger for subclassing. Les denne opplæringen av Aaron Crabtree hvis du ønsker å lære mer om Objective-C kategorier.
I stedet for å utforske de viktigste klasser av UIKit som vi gjorde for stiftelsen rammeverk, vil vi opprette og reise gjennom en ny iOS-prosjektet og utforske de klassene vi møter. Ved å ta denne tilnærmingen, vil det raskt bli klart i hvilken sammenheng en klasse er brukt og hvor hver klasse får plass i den bredere ordningen med en iOS-applikasjonen og hvilken rolle den spiller.
A New Beginning
Launch Xcode og opprette et nytt prosjekt ved å velge New > Prosjekt ...
fra Fil
menyen. I iOS-delen til venstre velger, programkategori. Fra listen over prosjektmaler, velger Enkel visning Application mal.
Enkel visning Application mal inneholder de grunnleggende byggesteinene i et iOS søknad og er derfor et godt sted å starte turen.
Navn prosjektet UIKit og skriv en organisasjon navn og selskap identifikator. Skriv inn en klasse prefiks, som jeg forklarte tidligere i denne serien, og satt enheter til iPhone.
Fortell Xcode hvor du vil lagre det nye prosjektet og sørge for å sette prosjektet under versjonskontroll ved å krysse av i boksen merket Opprett git repository på My Mac
. Se denne artikkelen for mer informasjon om versjonskontroll og dens goder.
filer og mapper
Vi har lært mange nye ting siden sist vi skapte en iOS-prosjekt fra scratch så det er en god idé å utforske de ulike filer og mapper av vårt nye prosjekt for å se om de ringe en bjelle
I prosjekt Navigator, bør du se tre mapper ved roten av prosjektet;. Anmeldelser
Produkter
Strukturer
en mappe med prosjektets navn, UIKit
i dette eksempelet
en mappe med et navn som ender med < b> Tester
, UIKitTests
i dette eksempelet
La oss ta en titt på innholdet i hver av disse mappene.
produkter
Produkter mappen inneholder i dag to elementer. Det første elementet bærer navnet vårt prosjekt og har en forlengelse av .app. Navnet på det andre elementet ender i Tester Kjøpe og har en forlengelse av .xctest
. Jeg vil ikke dekke enhet tester i denne serien, så du kan ignorere det andre elementet for nå.
Produkter mappen inneholder program eller applikasjoner-laget av prosjektet etter kompilering av kildekoden.
Har du lagt merke til at UIKit.app
er uthevet i rødt? Når Xcode er ute av stand til å finne en fil, fremhever den filen i rødt. Fordi prosjektet ikke er utarbeidet ennå, har Xcode ikke skapt produktet ennå.
Strukturer
Strukturer mappen inneholder rammer prosjektet er knyttet mot. I den forrige artikkelen, ble prosjektet kun er knyttet mot Foundation rammeverket. Dette prosjektet er imidlertid basert på en iOS-applikasjon mal og derfor knyttet mot fire rammer, Foundation, UIKit, Core Graphics, og XCTest.
Du husker kanskje Core Graphics rammeverket fra tidligere i denne serien. Rammeverket inneholder grensesnitt for den (Quartz) 2D tegning API. Den XCTest rammeverket er knyttet til enhetstesting, som jeg ikke vil dekke i denne serien.
Det er ett annet sted i vårt prosjekt som angir hvilke rammer prosjektet er knyttet mot. Velg prosjektet i Prosjekt Navigator, velger det eneste elementet i avsnittet Targets til venstre, og åpne fanen Bygg Faser på toppen.
Ved å åpne Link Binary med biblioteker skuff, du blir presentert med samme liste over rammer som vi så i Frameworks mappen. Knytte vårt prosjekt mot en annen iOS system rammeverket er like enkelt som å klikke på pluss-knappen nederst på listen og velge en ramme fra listen.
Prosjektmappe
Mesteparten av tiden tilbringes i prosjektmappen, som i dag inneholder seks filer og en mappe som heter støttefiler. La oss begynne med å ta en titt på innholdet i støttefiler mappen
< PROJECT > -Info.plist. Denne filen, ofte referert til som "info-dot-plist" fil av et prosjekt, er en eiendom liste som inneholder ulike konfigurasjonsinnstillinger. De fleste av disse innstillingene kan også endres ved å velge prosjektet i prosjekt Navigator, velge målet i listen Targets, og åpne Generelt
, Evner
, og Info
faner
InfoPlist.strings. Hvis Info.plist inneholder verdier som må lokaliseres, så kan du gjøre det ved å angi dem i InfoPlist.strings. Søknad lokalisering er noe vi ikke vil dekke i denne serien
main.m. Denne filen bør være kjent nå. Når du oppretter iOS-applikasjoner, men du vil sjelden endre innholdet på main.m. Den inneholder programmets hovedfunksjon, som er hvor all magien begynner. . Selv om vi ikke skal endre main.m, er det avgjørende for iOS-applikasjonen
< PROJECT > -Prefix.pch: Dette er prosjektets forhåndskompilert header fil, som vi allerede har møtt tidligere i denne serie. Som navnet tilsier, er header-filer som er oppført i forhåndskompilert header filen ferdigbygd av Xcode, som bringer ned tiden det tar å kompilere prosjektet. Stiftelsen og UIKit rammer ikke endres ofte, så det er ikke nødvendig å samle dem hver gang du kompilere prosjektet. I tillegg til forkompilerer header filer som er oppført i forhåndskompilert header filen, er hver kilde fil i prosjektet prefiks de oppførte header filer.
Application Components
Nå som vi vet hva de forskjellige filene og mappene i prosjektet vårt er for, er det på tide å utforske de forskjellige komponentene i en iOS-applikasjon. Som vi fortsette vår reise, vil vi komme over flere klasser som tilhører UIKit. Hver klasse som tilhører UIKit rammeverk starter med klassen prefikset UI. Husk at Foundation Classes innledes med NS.
The Model-View-Controller Mønster
Før vi begynne å utforske UIKit rammeverk, jeg ønsker å snakke om Model-View-Controller (MVC) mønster. MVC mønsteret er en av de mest utbredte mønstre i objektorientert programmering. Det fremmer kode gjenbruk og har tette bånd med begrepet separasjon av ansvar eller bekymringer. En av de viktigste målene i MVC mønsteret er separasjon av en søknad forretningslogikk fra presentasjonen laget.
Cocoa Touch omfavner MVC mønsteret, og det er derfor viktig å forstå hva det er og hvordan det fungerer. Med andre ord, ved å forstå MVC mønsteret, vil det være mye lettere å forstå hvordan de ulike komponentene i en iOS-applikasjonen fungerer sammen.
I MVC mønsteret, er en modell i kontroll av virksomheten logikken i en søknad. Samspill med en database, for eksempel, er ansvaret for modellen. Utsikten presenterer data som er administrert av modellen for brukeren. Utsikten forvalter brukergrensesnitt og brukerundersøkelser.
Kontrolleren er limet mellom modellen og utsikten. Mens modellen og utsikten ikke vet om hverandres eksistens, vet kontrolleren om både modell og utsikten.
Fordi kontrolleren vet om både modell og utsikt, er det ofte den minst gjenbruk stykke en søknad. Jo mindre et objekt vet om sitt miljø og objektene den kommuniserer med, jo høyere gjenbruks vil være i fremtidige prosjekter.
UIApplication
Selv om UIApplication klasse er en nøkkelkomponent av hver iOS-programmet, vil du ikke bruker det veldig ofte, og du vil sjelden eller aldri føler behov for å underklasse UIApplication.
Når et program lanseringer, en singleton i denne klassen er opprettet. Husker du hva en singleton objekt er? Det betyr at bare ett objekt forekomst av UIApplication klassen er opprettet under et program levetid.
UIApplication eksempel er utgangspunktet for brukermedvirkning, og det sender hendelser til de aktuelle målet objekter. Den nøyaktige betydningen av dette vil bli klart i løpet av få minutter når vi tar en titt på visning kontrollere.
I de fleste iOS-applikasjoner, den UIApplication eksempel har en delegat objekt knyttet til den. Når du oppretter en iOS-prosjekt med en av de medfølgende maler, vil Xcode lage en søknad delegat klasse for deg. Ta en titt på navnene på de kildefilene i prosjektmappen i Prosjekt Navigator. De to første filene er navnet TSPAppDelegate
.
Den instans av denne klassen er representanten for UIApplication enkelt. Før du tar en nærmere titt på TSPAppDelegate klasse, må vi forstå hva representanten mønsteret er.
Ole Begemann skrev en utmerket artikkel om lanseringen sekvens av en typisk iOS søknad. I denne artikkelen forteller han om de ulike komponentene som er involvert og deres rolle under programstart sekvens. Jeg anbefaler å lese denne artikkelen hvis du ønsker å få en bedre forståelse av rollen til UIApplication klasse samt den mystiske main () -funksjonen i main.m.
Dele Pattern Anmeldelser
delegat mønsteret er mye brukt i Cocoa og Cocoa Touch. I neste artikkel i denne serien, der vi utforske ins og outs av en tabellvisning, vil du oppdage at tabellvisninger avhengige representanten (og datakilde) mønster.
I likhet med MVC mønsteret , er delegasjonen vanlig i objektorientert programmering. Representanten mønster i Cocoa Touch, er imidlertid litt annerledes, fordi det gjør bruk av en delegat protokoll for å definere atferden til representanten objektet.
La oss hoppe videre og ta en titt på bord visninger. Hvis du har brukt noe tid med en iPhone eller iPad, så UITableView klassen bør være kjent for deg. Den presenterer en ordnet liste av data til brukeren, og det gjør denne jobben veldig bra.
Hvordan en tabellvisning vet hva de skal gjøre når en rad tappes? Er denne oppførselen inkludert i UITableView klassen? Absolutt ikke, fordi dette problemet varierer fra program til program. Hvis vi skulle inkludere denne oppførselen i UITableView klassen, ville det ikke være veldig gjenbrukes.
Tabellvisningen outsourcer dette ansvaret til en delegat objekt. Sagt på en annen, det delegatene denne oppgaven til et annet objekt, en delegat objekt. Ta deg tid til å inspisere klassen referanse til UITableView klassen. Den har to egenskaper som heter datakilden og delegat. Representanten er varslet av tabellvisningen når en bruker kraner rad. Det er ansvaret til representanten objekt for å svare på brukerens springen.
Datakilden av utsikten bordet er like når det gjelder oppførsel. Den viktigste forskjellen er at utsikten bordet spør datakildeobjektet for noe, data som det er behov for å vise.
Deleger og datakildeobjekter, for eksempel tabellen vise sin delegat og Datasource objekter, er nesten alltid tilpasset klasser, klasser som du lager, fordi gjennomføringen er programmet bestemte.
Før vi tar en titt på TSPAppDelegate klassen, er det viktig å forstå at en delegat objekt samsvarer med en delegat protokollen. I forrige artikkel, vi allerede har lært om protokoller i Objective-C og hvordan de definerer oppførsel ved å definere en liste over metoder for sine adopters å gjennomføre.
Program delegat
Nå at vi vet hva delegering er, er det på tide å utforske TSPAppDelegate klasse som Xcode skapt for oss. Ved programstart, oppretter programmet en forekomst av TSPAppDelegate klassen. Du vanligvis aldri trenger å eksplisitt instantiate en søknad delegat objekt.
Åpne tekstfilen av TSPAppDelegate klasse ( TSPAppDelegate.h
) for å undersøke innholdet. Hvis vi ser bort fra kommentarene på toppen, importerer den første linjen header filer av UIKit rammeverket slik at vi kan jobbe med sine klasser og protokoller
#import. ≪ UIKit /UIKit.h >
Den neste linjen skal være kjent. Dette er starten på grensesnittet av TSPAppDelegate klasse som merket medinterface direktivet. Den angir navnet på klassen og klassens superklasse, UIResponder.
Mellom vinkelparenteser er protokollene klassen er i overensstemmelse med. Den TSPAppDelegate klassen er i samsvar med en protokoll, det UIApplicationDelegate protokollen
interface TSPAppDelegate: UIResponder < UIApplicationDelegate >
Den neste linjen er en egenskap erklæring, som skal se kjent.. Eiendommen, vindu, er et eksempel på UIWindow, som er en underklasse av UIView. Ordene mellom parentes, sterke og nonatomic, er valgfrie eiendom attributter som angir lagrings semantikk og oppførsel av eiendommen. Du kan ignorere dem nå
property (sterk, nonatomic) UIWindow * vinduet;.
Det mest interessante delen av grensesnittet av TSPAppDelegate klassen er UIApplicationDelegate protokollen. Ta en titt på referanse av UIApplicationDelegate protokollen for en fullstendig liste over metodene protokollen definerer.
Protokollen definerer dusinvis av metoder og jeg oppfordrer deg til å utforske noen av dem for å få en idé om protokollens evner. Metoden som er mest interessant for oss på dette punktet er programmet: didFinishLaunchingWithOptions :.
Når UIApplication eksempel er ferdig med å forberede søknaden om lanseringen, vil den varsle representanten, vår TSPAppDelegate eksempel at søknaden blir ferdig lansere -men at det ikke har skjedd ennå.
Hvorfor varsle det programmet delegat av denne hendelsen? Den UIApplication eksempel varsler sin delegat om denne hendelsen slik at den har en mulighet til å forberede seg til programstart. Head over til gjennomføring fil av TSPAppDelegate å se hva jeg mener. Den første metoden i gjennomføringen filen er program: didFinishLaunchingWithOptions: og det skal mer eller mindre ser ut som den ene limes under Anmeldelser - (BOOL) program: (UIApplication *) søknad didFinishLaunchingWithOptions:. (NSDictionary *) launchOptions {return JA; }
Søknaden: didFinishLaunchingWithOptions: metoden gir en referanse til UIApplication forekomst og en ordbok med alternativer, som er av ingen interesse for oss på dette punktet. Metoden implementering er ganske enkel. Alt den gjør er tilbake YES å fortelle UIApplication eksempel at søknaden er klar til å starte.
Storyboard
Xcode prosjekt inneholder en annen interessant fil, Main.storyboard
. Dreieboken definerer hvordan brukergrensesnittet til vår søknad vil se ut. Som standard er den storyboard navnet Main.storyboard
. Velg dreieboken for å åpne den.
Dreieboken inneholder for tiden en visning i det sentrale arbeidsområdet. På høyre for Prosjekt Navigator
kan du se en liste over elementer, som er de stedene du ser i visningen. Den øverste elementet er navnet View Controller Scene
, som inneholder ett barn element merket View Controller
.
View Controller
objekt har også en rekke av barne elementer, men det er en som er av spesiell interesse for oss,
objektet navnet Vis
. Husk vår diskusjon om MVC mønsteret. Her kan du se MVC mønsteret i aksjon. Modellen mangler i øyeblikket, men vi har en visning, Vis
objekt, og en kontroller, View Controller
objekt.
Når våre program lanseringer , dreieboken brukes til å lage programmets brukergrensesnitt. Utsikten kontrolleren er automatisk startes og så er utsikten controller syn. Vis
objekt i dreieboken forvaltes av utsikten kontrolleren.
Vent et øyeblikk. Hvor finner jeg den klassen av utsikten kontrolleren i dreieboken? Hvordan kan jeg endre sin atferd for å skape et unikt program? Velg View Controller
objekt til venstre i dreieboken og åpne Identity Inspektør
til høyre.
Identity Inspector
forteller deg alt du trenger å vite. På toppen, i seksjonen Custom Class
, kan du se navnet på visningen kontrolleren klasse, TSPViewController. Har du lagt merke til at de to filene vi har ikke snakket om ennå har det samme navnet? Vi vil utforske disse filene i en liten stund.
Utsikten kontrolleren er instansiert for oss, fordi det er den første visningen kontrolleren av dreieboken. Dette er angitt i dreieboken med pilen som peker til dreieboken.
UIViewController
Hvis du åpner TSPViewController.h, vil du legge merke til at TSPViewController klasse er en underklasse av UIViewController . Som TSPAppDelegate er UIViewController klasse en underklasse av UIResponder. Vis kontrollere, eller undergrupper av disse, faller i kontrolleren kategori av MVC mønsteret. Som navnet tilsier, kontrollerer de et syn, en forekomst av UIView klassen, som faller i visningen kategori av MVC mønsteret.
En visning kontrolleren styrer en visning og er subviews som vi skal se senere . For å gjøre dette, må visningen kontrolleren til å vite om visningen. Med andre ord, det er behov for å ha en referanse til visningen.
Utsikten controller i dreieboken har en referanse til visningen. Du kan kontrollere dette ved å velge visningen kontrolleren i dreieboken og åpne tilkoblinger Inspector til høyre.
I Connections Inspector, skal du se en seksjon som heter Outlets. Begrepet uttaket er et fancy ord for en eiendom, som du kan sette i dreieboken. Sveve med musen over uttaket heter utsikten og observere hvordan visningen i arbeidsområdet er uthevet. Det er sammenhengen mellom syn kontrolleren og utsikten.
UIView
Selv om søknaden kan bare ha én forekomst av UIWindow, kan det ha mange visninger. Den UIView klassen er en viktig komponent i UIKit rammeverk, fordi mange klasser arver fra it-enten direkte eller indirekte.
Revidere Main.storyboard
ved å velge den og ta en titt på objektet Bibliotek på bunnen av Inspector
.
Bla objektbiblioteket og dra en etikett og en knapp for å visningen i arbeidsområdet. Det spiller ingen rolle hvor du plasserer dem i visningen, så lenge de er i visningen kontrolleren syn.
Du vil ha lagt merke til at to nye objekter er lagt til seksjonen objekter til venstre. Både etiketten (UILabel) og knappen (UIButton) arve fra UIView. La du merke til at etiketten og knappeobjekter er litt innrykket i forhold til Vis objekt? Dette indikerer at etiketten og knappeobjekter er subviews av Vis-objekt. En visning kan ha en eller flere subviews at den klarer.
Som jeg nevnte tidligere, er UIView klasse en viktig del av UIKit. En visning forvalter et rektangulært område eller en ramme på skjermen. Den håndterer innholdet i området, den subviews, og eventuelle interaksjoner med visningen innhold. Den UIView klasse er en underklasse av UIResponder. Du vil lære mye mer om visninger i løpet av denne serien.
Outlets
La oss ta en titt på et eksempel for å illustrere forholdet mellom dreieboken, utsikten den inneholder , og utsikten kontrolleren. Disse tre komponentene er viktig, og jeg vil være sikker på at du forstår akkurat hvordan de fungerer sammen.
For noen minutter siden, lagt deg en etikett og en knapp til visningen kontrolleren syn. Hvordan visningen kontrolleren vet om disse stedene? For øyeblikket har de ikke vises i Connections Inspector, men vi kan endre det ved å fortelle visningen kontrolleren om dem.
Åpne visningen kontrollerens header fil ( TPS
ViewController.h ) og legge en eiendom for etiketten og for knappen
property IBOutlet UILabel * mylabel;.property IBOutlet UIButton * MyButton;
Ved å legge til IBOutlet nøkkelordet til eiendommen erklæringen, egenskapene vil vises i Connections Inspektør i storyboard og det er det vi ønsker.
Leder tilbake til dreieboken, velger du View Controller
objekt i View Controller Scene
, og åpne Tilkoblinger Inspector til høyre. De nye egenskapene er nå oppført i listen over Outlets
. Imidlertid har utsikt controller ennå ikke gjort sammenhengen mellom de nye egenskapene og objektene i dreieboken.
Dette er lett å rette opp. Dra fra tom sirkel på venstre på mylabel uttaket til etiketten i arbeidsområdet. Dette vil skape den viktige forbindelsen slik at utsikten kontrolleren vet om etiketten. Gjør det samme for knappen.
Selv om vi kan endre teksten på etiketten i dreieboken, la oss gjøre dette i visningen kontrolleren for å illustrere at utsikten kontrolleren har tilgang til etiketten og knapp i dreieboken.
Åpne visningen kontrolleren implementering fil (TPSViewController.m) og se etter viewDidLoad metoden. Endre viewDidLoad metode for å reflektere gjennomføringen nedenfor. Kommentarene er utelatt for klarhet Anmeldelser - (void) viewDidLoad {[super viewDidLoad].; [self.myLabel setText: @ "Dette er et eksempel på UILabel."];}
Vi kan sende meldinger til etiketten eiendom ved å spørre visningen kontrolleren, selv, for sin mylabel eiendom. Ved å sende mylabel eiendommen et budskap om setText: og passerer en streng bokstavelig, oppdaterer vi etiketten tekst
Merk at setText. Er et tilbehør eller setter. Selv om det er mulig å bruke Objective-C er dot notasjon (se nedenfor), har jeg brukt den mer tradisjonelle syntaks som det bedre viser deg hva som faktisk skjer.
Self.myLabel.text = @ "Dette er et eksempel på UILabel ";.
Kjør programmet i iOS Simulator ved å klikke på Kjør-knappen øverst til venstre og merker at etikettens teksten er faktisk oppdatert
Handlinger
Vi har utforsket en masse nye ting i denne artikkelen. Jeg vil avslutte denne utgaven ved å snakke om handlinger. Akkurat som uttak, handlinger er ikke noe mer enn metoder som du kan se i dreieboken.
La oss se hvordan dette fungerer. Åpne visningen kontrollerens header fil (TPSViewController.h) og legge til følgende metode erklæring sted i visningen kontrollerens grensesnitt blokk Anmeldelser - (IBAction) changeColor:. (Id) avsender;
Ikke bli forvirret av IBAction søkeord. IBAction er identisk til å annullere, hvilket betyr at fremgangsmåten returnerer ingen verdi. Hvis vi tar en nærmere titt på den metoden erklæringen, kan vi se at det tar ett argument av type id, en referanse til en Objective-C objekt.
Som argument navnet tilsier, argumentet av metoden eller handling er objektet som sendte meldingen til visningen kontrolleren. Jeg vil forklare dette nærmere i bare litt.
Revidere dreieboken, velger du View Controller objekt i View Controller Scene
, og åpne tilkoblinger Inspector. En ny seksjon har dukket opp i Connections Inspector heter mottatte Handlinger og handlingen vi nettopp lagt er oppført i denne delen.
Dra fra tom sirkel på venstre side av handlingen til knappen i arbeidsområdet. Et lite vindu med en liste over alternativer skal vises. Listen inneholder alle mulige hendelser som knappen kan svare på. Den ene som interesserer oss er Touch Up Inside. Denne hendelsen utløses når en bruker berører knappen og løfter sin finger mens de fortsatt inne knappen.
Bygg og kjøre programmet på nytt og trykk på knappen. Visste programmet krasje for deg også? Hvordan skjedde dette? Når du trykket på knappen, sendte det et budskap om changeColor: til visningen kontrolleren. Selv om utsikten kontrolleren erklærer en changeColor: metode, betyr det ikke implementere denne metoden ennå
Når en melding sendes til et objekt som ikke implementerer en tilsvarende metode, et unntak er hevet og programmet krasjer IF. Unntaket er ikke fanget. . Du kan kontrollere dette ved å kjøre programmet igjen, trykke på knappen, og inspiserer resultatet i konsollen vinduet
For å bøte på dette, må vi implementere changeColor: metode. Åpne visningen kontrolleren implementering fil (TPSViewController.m) og legge til følgende metode implementering sted i gjennomføringen blokk Anmeldelser - (IBAction) changeColor:. (Id) avsender {NSLog (@ "Sender Class >% @", [ ,,,0],avsender klasse]); NSLog (@ "Sender Super >% @", [avsender super]); int r = arc4random ()% 255; int g = arc4random ()% 255; int b = arc4random ()% 255; UIColor * color = [UIColor colorWithRed: (r /255,0) green: (g /255,0) blue: (b /255,0) alpha: 1,0]; [self.view setBackgroundColor: farge];}
Gjennomføringen av changeColor: metoden er identisk med den vi brukte tidligere i denne serien. Jeg har imidlertid lagt til to ekstra NSLog samtaler til gjennomføringen vise deg at avsenderen av meldingen er faktisk på knappen som vi har lagt til dreieboken.
Metoden i seg selv er ganske enkel. Vi genererer tre tilfeldige tall mellom 0 og 255, passerer disse verdiene til colorWithRed: green: blå: alpha. Å generere en tilfeldig farge, og oppdatere bakgrunnsfargen på visningen kontrolleren syn med tilfeldig generert farge
Merk at self.view referanser den oppfatning at visningen kontrolleren styrer og som vi så tidligere i dreieboken.
Bygg og kjøre programmet en gang, trykk på knappen, og ikke glem å inspisere utgang i Xcode konsollen vinduet. Du vil merke at avsenderen er en forekomst av UIButton og dens superklasse er UIControl.
Konklusjon
I denne artikkelen har vi utforsket noen klasser av UIKit rammeverket og Vi tok en nærmere titt på de ulike komponentene i en iOS-applikasjon. Vi vil utforske og arbeide med UIKit rammeverket i mer detalj i resten av denne serien.
Hvis du ikke fullt ut forstår de ulike begrepene og mønstre, så jeg er sikker på at du vil som serien utvikler seg. Ikke nøl med å legge igjen en kommentar hvis du har spørsmål om denne artikkelen.