iPhone-udvikling #2: De første skridt
Vi skal nu lave en kode der åbner safari på simulatoren, når man trykker på den label/knap vi lige har lavet.
Tilføj denne metode til vores iphone_dev_1AppDelegate.m fil, lige nedenunder den tidligere applicationDidFinishLaunching-funktion:
-(IBAction) clicked:(id)target{
NSString* url=@"http://www.iphoneguide.dk";
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}
Det vil sige, at det skal se sådan ud:
- (void)applicationDidFinishLaunching:(UIApplication *)application {NSLog(@"Hello!");
[window makeKeyAndVisible];
}-(IBAction) clicked:(id)target{
NSString* url=@"http://www.iphoneguide.dk";
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}
Denne metode er simpel. Den definerer en url, og beder vores applikation om at åbne den.
Vi skal nu lige over i iphone_dev_1AppDelegate.h, ikke i iphone_dev_1AppDelegate.m som vi lige var i.
Vi har ikke kigget på vores .h-fil før. Den er meget simpel, men lad os lige vente med at gennemgå den til en anden artikel.
Lige nu nøjes vi med at tilføje lidt kode til .h-filen. Tilføj:
-(IBAction) clicked:(id)target;
lige ovenover @end
Denne kode i .h-filen fortæller compileren, det program som bygger vores program, at vi har en metode der hedder “clicked”. Denne metode har vi så implementeret ovre i vores .m-fil.
Så vi er vores kode istand til at åbne en URL, nu skal vi bare få vores GUI til at kalde koden. HUSK AT GEMME! Tilbage til Interface Builder (Dobbelt-klik på MainWindow.xib).
Nu kommer det svære:
Find vores AppDelegate i objektnavigatoren, nederst i Interface Builder, højreklik på den (ctrl+klik), og den mørke menu i nedenstående skærmbillede dukker op. Se du kan se står der “clicked:”, og det er en reference til den metode vi netop har skrevet i AppDelegate’n, den metode der åbner en URL.
Marker den lille cirkel til højre for “clicked:” og træk en blå linie op til vores knap.

På den måde angiver vi at metoden “clicked:” skal udløses af en event fra knappen. Når du slipper musetasten popper følgende sorte menu op.

Den menu beder os om at vælge hvilken event der skal udløse vores “clicked:” metode.
Vi vælger “Touch Up Inside”.
Det vil sige, at når en berøring indenfor knappens afgrænsninger bliver afbrudt, skal “clicked:” kaldes.
Gem, og vend tilbage til xcode.
I xcode trykker du “Build and Go”.
Hvis der ikke er nogle problemer starter iPhone-simulatoren op og kører vores program. Tryk på iPhoneGuide.dk med musen (ikke med fingeren, med mindre din skærm har touch-teknologi red.). Vores program lukker og Safari starter, og viser den valgte side.
Færdig!
Puha, det var en hård omgang, og der er sikkert mange ting der ikke lige gav mening. Men hvis du er kommet så langt, er du et godt stykke på vejen.
Til næste gang kan du prøve at tilføje endnu en knap, ændre urlen. Måske putte en label på vinduet.
I næste uge giver vi os i kast med at lave en tabel med links.
Artiklen er skrevet af Mikkel Bruun, increment.dk
Nu får vi bedre mobildækning
Fart hen over skrivebordet
Nu åbner Sonosguide.dk
Populær iPhone-app har kopieret alle dine kontakter.
Se Paul McCartney-koncert direkte med Apple TV
Apple leder efter udviklere til iPad 3-event
iPad 3-event i starten af marts?
Fotos af bagsiden til iPad 3 tyder på større batteri
Indviklet fodring af festlige pingviner
iPads på menuen
Tips: Flere muligheder for at ændre størrelsen på et vindue
FBI frigiver baggrundstjek på Steve Jobs fra 1991
Lion-gendannelse flere Mac’s
Apple snart klar med ny effektiv Macroscalar-processorteknologi?
Nye pegeikoner kan være hint om Mac’s med Retinaskærm
Rygterne om Apple fjernsyn tager til
Genius-funktion er kommet til Apple TV
Munster: Apple er i dialog med producenter af TV-komponenter
Spar 300 kroner på en Apple TV i Fona
Patrick
Yay… Glæder mig alleredetl næste uge
30. januar 2009 @ 08:25
Mikkel
puha, det er en lang artikel. Håber ikke at I har planer i weekenden.
Husk at smide en kommentar hvis I løber ind i nogle problemer…
30. januar 2009 @ 08:37
Martin
Jeg har nu gennemgået det med positivt resultat, det tog ca. en halv time. Men jeg har læst den igennem 3-4 gange inden jeg gjorde det (i forbindelse med at jeg redigerede artiklen) og leget lidt med xcode inden da, så det kan godt være det tager lidt længere tid.
Nu vil jeg så “lege” lidt og se hvad der sker “eller ikke sker”.
30. januar 2009 @ 09:14
Martin
Jeg har nu tilføjet en ekstra “knap” der åbner politikkens hjemmeside:
Jeg har lavet en ny metode, som jeg har kaldt “clicked2″ efter samme mønster som “clicked” blot med politiken.dk som URL. Nu vil jeg forsøge at finde ud af hvordan de forskellige events kan åbne URLen dvs. ændre “Touch up inside” til nogle af de andre ting.
Jeg vil også opfordre andre til at komme med deres erfaringen, og så de negative. Vi kan jo være heldige at Mikkel forklarer os hvorfor det ikke virker, eller hvorfor det er en dårlig ide det vi gør.
30. januar 2009 @ 09:27
JFlindt
Super lækker artikel serie…. Tog ikke lang tid at løbe den igennem og få den første app op og spille.
Glæder mig til næste artikel i serien
30. januar 2009 @ 11:46
Martin
@Mikkel
Er det rigtigt forstået, at “clicked” og “clicked2″ som ovenfor i kommentaren udelukkende er et navn og derfor i princippet kunne være hvad som helst (sigende, så man kan huske det) eller er der noget jeg har misforstået?
30. januar 2009 @ 14:12
emil
Så mangler jeg bare en mac ):
30. januar 2009 @ 15:01
Mikkel
Martin, de kan hedde hvad som helst…
Glad for at I kan få det til at virke…
30. januar 2009 @ 16:04
LaWiPi
Hey!
Hvor er “næste side” når man læser den iPhone-formaterede udgave af siden?
30. januar 2009 @ 19:39
Martin
@LaWiPi
Så er det på plads. Tak for at gøre mig opmærksom på problemet.
30. januar 2009 @ 20:55
LaWiPi
Det var da så lidt! kvaliteten af artiklen steg betydeligt, da de øvrige sider kom med..
@Mikkel
Det er sgu et godt initiativ, og vel udført!
30. januar 2009 @ 21:18
EmilC
Rigtig god artikel.
Tak til Mikkel fordi du gider, at dele din erfaring med os andre
30. januar 2009 @ 22:55
NP
Tak for en rigtig god artikel.
Jeg har små problemer, og kan ikke finde ud af, hvad jeg gør forkert.
Jeg har indtastet koden i .h og .m, og derefter når jeg højre klikker på knappen, kan jeg ikke få “clicked” frem, jeg kan kun vælge “Events” og “Referencing Outlets” i den mørke box.
10. februar 2009 @ 15:15
Emojet
Har et lige et spørgsmål:
Vil det være muligt at ændre en værdi i en boks ved at bruge metoden her? Altså clicked-metoden… Sådan så der står 9 når man har trykket en gang, på den knap man har lavet, hvorefter værdien fx bliver ændret til 12 når man trykker anden gang på den. Og hvordan gør man? Evt. kunne det indgå i næste artikel-serie?
//Emil
12. februar 2009 @ 21:10
Martin
@emojet
Det kan man godt gøre – det er præcis det jeg har gjort i mit program, Det Periodiske System. Jeg har dog brugt en lidt anden metode:
I IB laver jeg to knapper og en tekst-label.
I .h-filen har jeg defineret dette – dvs. jeg bruger “sender” i stedet for “target”:
@interface iPhone_dev_1AppDelegate : NSObject {
IBOutlet UILabel *lblTal;
}
@property(nonatomic,retain) IBOutlet UILabel *lblTal;
- (IBAction) knap1:(id) sender;
- (IBAction) knap2:(id) sender;
I .m-filen dette:
@synthesize lblTal;
- (IBAction) knap1:(id) sender {
lblTal.text = @”9″;
}
- (IBAction) knap2:(id) sender {
lblTal.text = @”12″;
}
I IB skal tingene så bare forbindes:
- Tryk på den ene knap og vælg derefter “connection inspector”. Fra “touch down” laver du en forbindelse til “files owner” og vælger knap1
- Fra den anden knap gør du det samme, men vælger knap2
- Fra Files owner laver du en forbindelse til din label og vælger lblTal
Det burde være det hele. Når du trykker på en af de to knapper sender de deres værdi til label. Du kan indføre flere knapper efter behov og også flere labels efter behov.
Dette bare ideen, der er ikke sikkert du kan bruge koden direkte.
12. februar 2009 @ 22:07
Emojet
Mange tak for hurtigt svar Martin
– Vil straks gå ind og prøve metoden… Men kan man også med en enkelt knap ændre værdien i labellen op til flere gange? Kun ved hjælp af en knap. D.v.s at labellen viser 1 første gang man trykker på knappen, hvorefter tallet i labellen bliver ændret til fx 2 næste gang man trykker på den samme knap?
Mvh Emil
13. februar 2009 @ 07:36
Martin
Givetvis, jeg ved bare ikke hvordan og har ikke selv haft brug for det endnu.
13. februar 2009 @ 09:14
mikkel
@NP, og du har gemt .h filen??
Har du skrevet IBOutlet i din .h fil de rigtige steder??
Hvids det ikke hjælper kan du sende mig din kode på mikkel@increment.dk, så kigger jeg på det??
13. februar 2009 @ 10:33
iSteff
Når jeg går ind i interfacebuilder så får jeg dette frem : http://bayimg.com/image/manomaabj.jpg så når jeg prøver den af i simulatren med den indsatte knap så er hele skærmen en stor knap med afrundede hjørner i toppen :/
16. februar 2009 @ 20:33
Anders
Hej, rigtig dejligt at se en artikel serie som denne – jeg har et problem med at få denne application til at lykkedes, og vil høre om nogle har haft samme problem, eller kunne give mig en løsning alligevel
, anyways. Jeg har fulgt dine instrukser helt præcist (efter min overbevisning), mht. kode og det hele. Dog får jeg følgende fejl mht. mit delegate.m, når jeg forsøger at compile:
error: “clicked” undeclared (first use in this function)
error: “url” undeclared (first use in this function)
Et andet spørgsmål jeg har, på mere generel plan er, ved andre blogs har jeg programmeret nogle begynder applications i “ViewController.m” og “ViewController.h”, hvorimod der i denne serie bliver skrevet kode i delegate.m og delegate.h. Hvad er forskellen?
Tak
Mvh. Anders
16. maj 2009 @ 18:04
Anders
Nvm – har fundet en løsning på det : )
18. maj 2009 @ 11:16
mikkel
#21 godt du fik det løst
ang #20 hvor man lægger sin kode handler lidt om stil og design. Det er svært at pege på nogen rigtig metode, men ofte let at udpege en forkert.
18. maj 2009 @ 12:00
Kuglepen
hmm, er der nogen som kan give et lidt bedre forklaring hvor NSLog(@”Hello!”); skal placeres ? for der sker intet når jeg trykker build and go
efter som jeg har forstået så skal den smides ind hvor // Override point for customization after application launch
men er sikker på det er mig som har misforstået et eller andet..
håber i kan hjælpe mig på rette vej..
mvh Kuglepen
15. juni 2009 @ 20:39
Martin
@Kuglepen
Et eller andet må der ske. Får du en fejlmeldning eller hvad sker der?
15. juni 2009 @ 21:06
Kuglepen
der sker intet, trykker build and go og så er det det
15. juni 2009 @ 21:19
Kuglepen
hey, så virker det, havde bare ikke fået slettet disse 2 // ;S
15. juni 2009 @ 21:26
Ulrik
Jeg får en error når jeg trykker “Build and Run”
der står: “Code Sign error: The Identity ‘iPhone Developer’ doesn’t match any valid certificate/private key pair in the default keychain”
Ved ikke rigtig hvad jeg skal gøre
7. oktober 2009 @ 01:19
Surferen
@Ulrik
Jeg får samme fejl. Og det er lige meget om jeg starter et helt nyt projekt og arbejder i, samme fejl opstår.
Fandt du ud af hvad man kunne gøre?
Jeg har på fornemmelse at det er efter jeg har tilsluttede min Iphone til min mac, at den er begyndt med det.
2. marts 2010 @ 10:41
Martin
@Ulrik og surferen
I kan kun teste programmet på selve iPhonen, hvis i har et gyldigt udvikkler-certifikat og det hele er sat om som det skal. Uden det kan i kun teste i simulatoren, der ikke kræver signering af kode.
2. marts 2010 @ 10:44
Surferen
Jeg fandt ud af det.
Det er fordi man kan vælge imellem simulator eller device, og hvis man ikke er godkendt udvikler, kan man ikke kører den på sin telefon.
udemærket. Så kan jeg heldigvis komme videre
2. marts 2010 @ 10:52
Surferen
@Martin
Tak for hjælpen. Det er nu sjovt at prøve at udvikle til Iphone og mac.
Jeg har selv udviklet rigtig meget til Windows C#, og et rigtig fedt sprog med masser af muligheder. Så glæder mig til at arbejde med obj-c. og dejligt at der er en masse guides herinde til at hjælpe en:-D
2. marts 2010 @ 10:55
Carsten
Er der nogle som har en løsning på iSteff´s spørgsmål?
jeg har nemlig samme problem
3. oktober 2010 @ 00:02
Carsten
Så virker det
Jeg fik valgt View-based App i stedet for Window-based App…
3. oktober 2010 @ 11:21
eske
rigtig dejligt at se en artikel serie som denne –
jeg har et problem med at få denne application til at lykkedes,
og vil høre om nogle har haft samme problem,
eller kunne give mig en løsning alligevel ,
anyways. Jeg har fulgt dine instrukser helt
præcist (efter min overbevisning), mht. kode og det hele.
Dog får jeg følgende fejl
error: “clicked” undeclared (first use in this function)
error: “expected befor token
24. januar 2011 @ 14:00
Martin
@eske
Tjek lige din kode igen. Der mangler måske et kolon efter clicked et sted.
24. januar 2011 @ 14:31
Jacob
Nogle der har lyst og evnerne til at udvikle en demo App til mig. Vi går og roder med lidt ideer, men skal bruge nogle der kan programmere.
8. februar 2011 @ 12:47
Niklafritz
hej Martin fed guide!!!
Hvordan får jeg applikationen ned på min iPhone? Og hvordan laver jeg en label så den ser godt ud når den ligger på min iPhone?
10. maj 2011 @ 12:49