Apple Push Notification Services in iOS 6 Tutorial
Source : www.raywenderlich.com
Si tu programas regularmente en iOS más de una vez te has topado con este problema, donde el teclado esconde un UITextField o UITextView (Y este problema es muy común).
He leído bastantes maneras sobre cómo “arreglar” este problema y con ello la manera de desplazar una vista o una ScrollView con el fin de evitar esconder un UITextField un UITextView cuando el teclado está en la pantalla.
Pero aquí está la que considero la mejor y más fácil solución que he encontrado (en mi opinión).
Es la Clase de Michael Tyson - TPKeyboardAvoiding: Una solución universal para mover una vista y evitar que el teclado esconda un textfield en iOS. Sólo tienes que descargar el proyecto y leer el archivo README para saber como usarlo. Yo lo he probado y funciona como un perfectamente.
Mas informacion:
Con el fin de navegar entre los UITexFields, primero que hay que hacer los siguientes pasos:
1 -. En primer lugar es necesario establecer el delegado(delegate) de cada una de los UITextField de xib a tu controlador.
2 -. Es necesario definir el “orden de tabulación”, estableciendo la el “tag” para cada UITextField
Despues, implementa el siguiente código en tu controlador.m
-(BOOL)textFieldShouldReturn:(UITextField*)textField;
{
NSInteger nextTag = textField.tag + 1;
// Try to find next responder
UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
if (nextResponder) {
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
} else {
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return NO; // We do not want UITextField to insert line-breaks.
}
Fuente:
Stackoverflow
Desde iOS 5, puedes utilizar el siguiente código para cambiar el fondo en el navigationbar utilizando una imagen:
[myNavbar setBackgroundImage:[UIImage imageNamed: @"UINavigationBarBackground.png"]
forBarMetrics:UIBarMetricsDefault];
Ahora bien, si deseas aplicar esa background para todas tus navBar en una app usa la siguiente linea en el appdelegate, en vez de repetir la anterior dentro de cada controlador:
[[UINavigationBarappearance] setBackgroundImage:[UIImageimageNamed:@"UINavigationBarBackground.png"] forBarMetrics:UIBarMetricsDefault];
Tu puedes usar NSDateComponents para eso
NSDate*curentDate =[NSDate date]; NSCalendar* calendar =[NSCalendar currentCalendar]; NSDateComponents* compoNents =[calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:curentDate];// Get necessary date components [compoNents month]//gives you month [compoNents day]//gives you day [compoNents year]// gives you year
Mas info:
NSDateComponents Class Reference
![]()
Si tienes un archivo .cvs que tiene algo como:
Nombre|Apellido|Edad|Direccion
Jesus|Guerra|28|Sonora
Y quieres remplazar el pipe con un Tab, puedes utilizar el siguiente comando de consola
cat test.csv | tr '|' '\t' > output.csv
En el siguiente link van a encontrar un excelente tutorial sobre RESTKit.
Introduction to RESTKit Tutorial by RayWenderlich, uno de los mejores blog sobre iOS dev. que hay en la web.
SimpleProgressHUD es un HUD muy sencillo y ligero de para iOS.
Instalación
Uso
Ver el proyecto de ejemplo en Xcode /Demo
SimpleProgressHUD se crea como un singleton, por lo que no tiene que ser instanciado de manera explicita, se puede llamar de manera directa [ProgressHUD defaultHUD], utilizando para mostrar el HUD lo siguiente:
- showInView:(UIView*)view;
Y para descartarlo:
-(void) hideActivityIndicator;
Puedes obtener una copia del codigo en GitHub.
Nota: SimpleProgressHUD esta inspirado en Sam Vermette’s SVProgressHUD para iOS.
Cuando yo estaba tratando de ”validar” mi aplicación (usando Xcode) para hacer una actualización de mi aplicación en iTunes Connect, por una razón desconocida que estaba recibiendo este mensaje de error:The key CFBundleVersion in the info.plist must contain a higher version than that of the previously uploaded version.
Si tienes el mismo problema, puede resolverlo de la siguiente manera:

Al principio supuse que el ”Bundle Version” para fines iTunesConnect era el que se puede ver en “Version Information”, pero parece que Apple utilizan datos diferentes para esos fines.
Espero haber sido de ayuda.
Las categorías son una de las características más útiles de Objective-C. En esencia, una categoría le permite añadir métodos a una clase existente, sin que la subclasificación o necesidad de conocer cualquiera de los detalles de cómo se implementa.
Una categoría recoge las implementaciones de método en archivos separados. El programador puede colocar grupos de métodos relacionados en una categoría para que sean más legibles. En otras palabras, si deseas agregar un método a todas las instancias de NSString en tu aplicación, solo hay añadir una nueva categoría. No hay necesidad de una subclase personalizada.
Por ejemplo, voy a añadir dos métodos para un NSString. uno para determinar si el contenido es una URL y la otra para añadir un método de reverseString.
Se vería así:

#import <Cocoa/Cocoa.h> @interface NSString (Extends) - (BOOL) isURL; - (NSString *)reverseString; @end
es muy similar a una declaración de clase. La diferencia es que no hay una súper clase, y hay un nombre para la categoría entre paréntesis, el nombre puede ser el que quieras.
#import "NSString_Extend.h"
@implementation NSString (Extends)
- (BOOL) isURL
{
if ( [self hasPrefix:@"http://"] )
return YES;
else
return NO;
}
- (NSString *) reverseString
{
NSUInteger len = [self length];
NSMutableString *rtr=[NSMutableString stringWithCapacity:len];
// unichar buf[1];
while (len > (NSUInteger)0) {
unichar uch = [self characterAtIndex:--len];
[rtr appendString:[NSString stringWithCharacters:&uch length:1]];
}
return rtr;
}
@end
A diferencia de las subclases, las categorías no se puede agregar variables de instancia. Puede, sin embargo, utilizar categorías para sustituir métodos existentes en las clases, pero debes hacerlo con mucho cuidado.
#import <Foundation/Foundation.h>
#import "NSString_Extend.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here...
NSString* string1 = @"http://pixar.com/";
NSString* string2 = @"Pixar";
if ( [string1 isURL] )
NSLog (@"string1 is a URL");
else
NSLog (@"string1 is not a URL");
if ( [string2 isURL] )
NSLog (@"string2 is a URL");
else
NSLog (@"string2 is not a URL");
NSString *test = [@"!A string to be reverted!" reverseString];
NSLog(@"%@", test);
[pool drain];
return 0;
}
Cuando se realizan cambios en una clase con una categoría, esta afecta a todas las instancias de esa clase en toda la aplicación.
Puedes descargar el codigo de este tutorial Aqui
Fuente: