by Degree Admin

iPhone Utvikling UIAlertView

UIAlertView er en nyttig funksjon som er vanlig å bruke i iPhone applikasjoner. Det brukes til å vise en “popup” boks for å gi brukeren ulike valg. I denne artikelen skal jeg vise hvordan man bruker dette for å lage en logg-ut dialog med brukeren. Jeg skal også gi et eksempel på en alert med et input text område.

- (IBAction) quitApp
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Sign Out"
message:@"Do you wish to sign out?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles: @"OK" ,nil];

[alert show];
[alert release];

}

I eksempelet ovenfor vil brukeren få presentert en alert som inneholder to knapper, samt et spørsmål om å logge ut av applikasjonen.

- (IBAction) alertTextbox
{
UIAlertView *dialog = [[[UIAlertView alloc] init] retain];
[dialog setDelegate:self];
[dialog setTitle:@"Enter Text"];
[dialog setMessage:@"Enter Text"];
[dialog addButtonWithTitle:@"Cancel"];
[dialog addButtonWithTitle:@"OK"];

nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
[nameField setBackgroundColor:[UIColor whiteColor]];
[dialog addSubview:nameField];
CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 0.0);
[dialog setTransform: moveUp];
[dialog show];
[dialog release];
[nameField release];

}

Dette eksepelet gir brukeren en alert som inneholder en tekstboks og to knapper. Her kan brukeren skrive inn en verdi i tekstboksen som kan hentes og benyttes i applikasjonen.

Nedenfor er et kodeeksempel som benyttes på knappene i uialertview.

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)index
{
if (index == 0)
{

}
else if (index == 1)
{
//handle textfield text
}
}

Et tips for å få bruke flere UIAlertViews på ett UIView er å definere hver alert med en egen tag. Definer hver ID slik:

#define kAlertViewOne 1;
#define kAlertViewTwo 2;

Deretter knytter man den ønskelige ID’en til den ønskelige alert’en slik:

alertname.tag = kAlertviewOne;

Da kan man enkelt identifisere hvilken UIAlertView som brukes med en enkel if setning:

if (alertView.tag == kAlertView){
}

by Degree Admin

iPhone Utvikling ASIHTTPRequest

ASIHTTPRequest brukes i iPhone utvikling for å gjøre kommunikasjon med web servere lettere. Noen eksempler på hva ASIHTTPRequest tilbyr er blandt annet muligheten for å sende eller motta data fra en web server, laste ned data til minne eller direkte til en fil på disk, enkel tilgang til request og response HTTP header, GZIP og cookie støtte, synchronous og asynchronous requester.

Last ned ASIHTTPRequest her: ASIHTTPRequest

Kopier de filene du trenger til din prosjekt mappe og legg dem til i ditt xcode prosjekt. Hvis du ikke er sikker på hvilke filer du trenger så kopier over følgende filer:

* ASIHTTPRequestConfig.hiphone
* ASIHTTPRequestDelegate.h
* ASIProgressDelegate.h
* ASICacheDelegate.h
* ASIInputStream.h
* ASIInputStream.m
* ASIHTTPRequest.h
* ASIHTTPRequest.m
* ASIFormDataRequest.h
* ASIFormDataRequest.m
* ASINetworkQueue.h
* ASINetworkQueue.m
* ASIDownloadCache.h
* ASIDownloadCache.m
* ASIAuthenticationDialog.h
* ASIAuthenticationDialog.m
* Reachability.h (i External/Reachability mappen)
* Reachability.m (i External/Reachability mappen)

Den enkleste måten å bruke ASIHTTPRequest er å bruke en synchronous request. Ved å sende startSynchronous meldingen vil requesten bli kjørt i samme tråd og returnere når requesten er fullført (uansett om den var suksessfull eller ikke). For å få responsen som en string bruker man responseString metoden og for binære data bruker man responseData. Få requesten til å laste ned data til en fil med downloadDestinationPath property.

- (IBAction)grabURL:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://blog.degree.no"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
}
}

Bruk asynchronous request for å kjøre requesten i bakgrunnen.

- (IBAction)grabURLInBackground:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://blog.degree.no"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}


- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];

// Use when fetching binary data
NSData *responseData = [request responseData];
}

– (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}

For mer informasjon om ASIHTTPRequest og hvordan man kan benytte det i eget prosjekt besøk ASIHTTPRequest

by Degree Admin

iPhone Utvikling UIViews

Jeg kommer til å legge ut en del innlegg som omhandler iPhone utvikling på denne bloggen. Jeg kommer til å begynne med mest grunnleggende funksjoner og muligheter for deretter å avansere. Dagens innlegg handler om å benytte forskjellige UIViews og hvordan man bytter mellom dem.

Etter å ha opprettet ett nytt “Window-based Application” prosjekt høyreklikker man på “Classes” mappen i prosjekt treet i Xcode. Velg Add -> New File… og velg “UIViewController subclass”. Huk av for “with XIB for user interface” og klikk neste. Gi filene et passende navn (jeg har brukt untitled og untitled2 siden dette bare er en demo), deretter drar man XIB filen over i “Resources” mappen. Gjenta denne prosessen slik at du har tilsammen to sett med filer.

Alle nødvendige filer er nå opprettet og neste steg er å tilføre den nødvendige koden som skal til for å veksle mellom de nye viewcontrollene. Gå først inn i App delegaten sin header fil (.h) og modifiser filen slik at den er lik som koden nedenfor:


#import

@class untitled;
@class untitled2;

@interface TestAppDelegate : NSObject {
UIWindow *window;
IBOutlet untitled *viewControllerOne;
IBOutlet untitled2 *viewControllerTwo;
}

-(void) switchViewOne;
-(void) switchViewTwo;

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet untitled *viewControllerOne;
@property (nonatomic, retain) IBOutlet untitled2 *viewControllerTwo;

@end

Deretter går du inn i App delegaten sin implementasjons fil (.m) og legger inn nødvendig kode slik at den ligner på koden nedenfor:


#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
untitled *_untitledOne = [[untitled alloc] initWithNibName:@"untitled" bundle:[NSBundle mainBundle]];
self.viewControllerOne = _untitledOne;
[_untitledOne release];
[window addSubview:[viewControllerOne view]];
[window makeKeyAndVisible];

return YES;
}

To metoder for å bytte mellom de ulike views’ene. En enkel flip animasjon er lagt til når man bytter views:


-(void) switchViewOne
{
untitled2 *mainview = [[untitled2 alloc] initWithNibName:@"untitled2" bundle:nil];
[self setViewControllerTwo:mainview];
[mainview release];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];
[viewControllerOne.view removeFromSuperview];
[self.window addSubview:[viewControllerTwo view]];
[UIView commitAnimations];
}

-(void) switchViewTwo
{
untitled *mainview = [[untitled alloc] initWithNibName:@"untitled" bundle:nil];
[self setViewControllerOne:mainview];
[mainview release];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];
[viewControllerTwo.view removeFromSuperview];
[self.window addSubview:[viewControllerOne view]];
[UIView commitAnimations];
}

Neste steg er å legge til kode i den første viewcontrolleren sin .h fil. Tilfør følgende kode:


#import
#import "untitled2.h"

@interface untitled : UIViewController {
IBOutlet UILabel *lblOne;
IBOutlet UIWindow *window;
}

@property (nonatomic, retain) UILabel *lblOne;
@property (nonatomic, retain) UIWindow *window;

-(IBAction)switchView: (id) sender;

@end

Deretter utfører du følgende kode i .m filen:


#import "untitled.h"
#import "untitled2.h"
#import "TestAppDelegate.h"

@implementation untitled

@synthesize lblOne;
@synthesize window;

-(IBAction)switchView: (id) sender
{
TestAppDelegate *mainDelegate = (TestAppDelegate *)[[UIApplication sharedApplication ]delegate];
[mainDelegate switchViewOne];
}

Den neste viewcontrolleren sin .h fil skal se slik ut:


#import
#import "untitled.h"

@interface untitled2 : UIViewController {
IBOutlet UILabel *lblOne;
IBOutlet UIWindow *window;
}

@property (nonatomic, retain) UILabel *lblOne;
@property (nonatomic, retain) UIWindow *window;

-(IBAction)switchView: (id) sender;

@end

Og .m filen skal se slik ut:


#import "untitled2.h"
#import "untitled.h"
#import "TestAppDelegate.h"

@implementation untitled2

@synthesize lblOne;
@synthesize window;

-(IBAction)switchView: (id) sender
{
TestAppDelegate *mainDelegate = (TestAppDelegate *)[[UIApplication sharedApplication ]delegate];
[mainDelegate switchViewTwo];
}

All nødvendig kode er nå lagt til. Siste steg er å knytte disse metodene til objekter i et view. Dobbelklikk på den første XIB filen som ble opprettet i steg èn som ligger under mappen “Interface Builder Files” i Xcode. Filen vil da åpnes i Interface Builder. Hvis ikke View’et åpnet seg så dobbelklikker du på “View” i xib filen. Dra over en label og legg til en tekst. Deretter drar du over en “round rect button” og gir den ett navn. Det neste som må gjøres er å knytte disse til koden vi implementerte i viewcontrolleren. Marker “File’s owner” og åpne “Connections Inspector”. Under “Received Actions” ligger det en metode. Dra en linje fra denne til knappen du opprettet i view’et. Gjør det så med lblOne som ligger under “Outlets” og dra den til Labelen som ble opprettet på view’et. Gjenta denne prosessen med den andre xib filen.

Applikasjonen er nå ferdig!

Build og kjør appen. Klikk på knappene for å bytte views. Da er det bare å begynne å leke med koden og ta dette videre!