martes, 31 de enero de 2012

Agregar pin a un mapa

Lo conveniente es crear una nueva clase que llamaremos Pin:
Pin.h

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface Pin : NSObject{ 
    CLLocationCoordinate2D coordinate;        
    NSString *subtitle;        
    NSString *title;     
}
    
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic,retain)NSString *subtitle;
@property (nonatomic,retain) NSString *title;
- (id) initWithCoords:(CLLocationCoordinate2D) coords;

@end 

Pin.m
#import "Pin.h"
@implementation Pin
@synthesize coordinate;
@synthesize subtitle;
@synthesize title;

- (id) initWithCoords:(CLLocationCoordinate2D) coords{

    self = [super init];
    
    if (self != nil)
        coordinate = coords;
    
    return self;
}

- (void) dealloc{
    [title release];
    [subtitle release];
    [super dealloc];

}
@end


Luego agregamos al mapa el pin:
CLLocationCoordinate2D pinlocation;
pinlocation.latitude = latitude;
pinlocation.longitude  = longitude;
Pin *pin = [[Pin alloc] initWithCoords:pinlocation];
pin.title = self.tituloSel;
[mapa removeAnnotations:[mapa annotations]];
[mapa addAnnotation:pin];
[pin release];

miércoles, 18 de enero de 2012

Mostrar otra pantalla

self.infoController = [[InformationViewController alloc]
                      initWithNibName:@"InformationViewController" 
                               bundle:[NSBundle mainBundle]];
 
[self presentModalViewController:infoController animated:YES];


y para volver desde esa nueva pantalla

  [self dismissModalViewControllerAnimated:YES];

Otra forma de pasar a otra pantalla
  progressView = [[ProgressViewController alloc] initWithNibName:@"ProgressViewController" bundle:nil];
        [self.view addSubview:progressView.view];
        

viernes, 30 de diciembre de 2011

Obtener una subcadena de un objeto String

NSString *str = @"Hola Mundo";
NSString *newStr = [str substringWithRange:NSMakeRange(0,4)];
newStr sería igual a "Hola".

miércoles, 28 de diciembre de 2011

Evitar que el teclado quede sobre los textfields

Uno de los problemas más comunes cuando programamos para iphone es que el teclado puede ocultar los textfields. La solución más rápida es correr los textfields de manera que no queden ocultos pero en mi aplicación yo tenía varios textfields y no me quedaba lugar para correrlos.

Encontré este tutorial http://joshhighland.com/blog/2010/04/20/iphone-keyboard-covers-text-field/ que me pareció que es el que tiene el código más simple y me funciono perfecto.
 
La idea es la siguiente, realizar dos IBAction en este caso slideFrameUp y slideFrameDown que seran llamados por los textfields cuando ocurran los enventos Editing Did Begin y Editing Did End respectivamente (como se muestra en la figura).


El código de los IBAction y del método que llaman los mismos es el siguiente:

-(IBAction) slideFrameUp;
{
    [self slideFrame:YES];
}
 
-(IBAction) slideFrameDown;
{
    [self slideFrame:NO];
}
 
-(void) slideFrame:(BOOL) up
{
    const int movementDistance = 50; // lo que sea necesario, en mi caso yo use 80
    const float movementDuration = 0.3f; // lo que sea necesario
 
    int movement = (up ? -movementDistance : movementDistance);
 
    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

miércoles, 14 de diciembre de 2011

Mostrar una imagen desde una url



NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: @"http://myurl/mypic.jpg"]];
cell.image = [UIImage imageWithData: imageData];
[imageData release];


lunes, 5 de diciembre de 2011

¿Cómo convierto un int a un NSString?


Una de las formas es mediante un método de NSString
[NSString stringWithFormat:@”%i” , elentero]

¿Y de NSString a float o a int?
La clase NSString tiene métodos para esto uno es floatValue y el otro intValue.
 NSString *aNumberString = @"35";
 int i = [aNumberString intValue];