Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Melhore sua vida, sua interface e diga adeus à UIAlertView

829 views

Published on

Palestra ministrada em Julho de 2012 na trilha de iOS do TDC 2012 sobre o uso da classe BlockAlertView como substituta da UIAlertView

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Melhore sua vida, sua interface e diga adeus à UIAlertView

  1. 1. Melhore sua vida, suainterface e diga adeus à UIAlertView Gustavo Pelosi Ambrozio 1
  2. 2. Programação• Amor e ódio pela UIAlertView• Como os Blocks me livraram do ódio• O ódio renasce com outra face• Uma visão de como se livrar do ódio• Eliminando o ódio com código• Espalhando o amor 2
  3. 3. Amor e ódio pela UIAlertView• (aparentemente) Fácil de • Delegates usar • Swithes• Prático • Tags • Constantes 3
  4. 4. @interface MyViewController : UIViewController <UIAlertViewDelegate>#define kRemoveConfirmAlertView 1#define kSendAlertView 2#define kLogoutConfirmAlertView 3- (IBAction)sendItem:(id)sender{ UIAlertView *view = [[UIAlertView alloc] initWithTitle:@”Enviar por” message:@”Como deseja enviar ?” delegate:self cancelButtonTitle:@”Cancelar” otherButtonTitles:@”Twitter”, @”Facebook”, @”Email”, nil]; view.tag = kSendAlertView; [view show]; [view release];} 4
  5. 5. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ switch (alertView.tag) { case kRemoveConfirmAlertView: if (buttonIndex == 1) [self removeItem]; break; case kSendAlertView: { switch (buttonIndex) { case 0: // Cancel break; case 1: // Twitter [self sendWith:kTwitter]; break; case 2: // Facebook [self sendWith:kFacebook]; break; case 3: // email MFMailComposeViewController *view = [[MFMailComposeViewController alloc] init]; view.mailComposeDelegate = self; [self.navigationController presentModalViewController:view animated:YES]; break; } } break; }} 5
  6. 6. Como os Blocks me livraram do ódio• PSFoundation (https://github.com/steipete/ PSFoundation/tree/master/Utils)• Peter Steinberger• PSAlertView e PSActionSheet• Renomeado para BlockAlertView e BlockActionSheet 6
  7. 7. @interface MyViewController : UIViewController <UIAlertViewDelegate>#define kRemoveConfirmAlertView 1#define kSendAlertView 2#define kLogoutConfirmAlertView 3- (IBAction)sendItem:(id)sender{ BlockAlertView *view = [BlocAlertView alertWithTitle:@”Enviar por” message:@”Como deseja enviar ?”]; [view setCancelButtonWithTitle:@”Cancelar” block:nil]; [view addButtonWithTitle:@”Twitter”, block:^{ [self sendWith:kTwitter]; }]; [view addButtonWithTitle:@”Facebook”, block:^{ [self sendWith:kFacebook]; }]; [view addButtonWithTitle:@”Email”, block:^{ MFMailComposeViewController *view = [[MFMailComposeViewController alloc] init]; view.mailComposeDelegate = self; [self.navigationController presentModalViewController:view animated:YES]; }]; view .tag = kSendAlertView; [view show];} 7
  8. 8. - (IBAction)sendItem:(id)sender{ BlockAlertView *view = [BlocAlertView alertWithTitle:@”Enviar por” message:@”Como deseja enviar ?”]; [view setCancelButtonWithTitle:@”Cancelar” block:nil]; [view addButtonWithTitle:@”Twitter”, block:^{ [self sendWith:kTwitter]; }]; [view addButtonWithTitle:@”Facebook”, block:^{ [self sendWith:kFacebook]; }]; [view addButtonWithTitle:@”Email”, block:^{ MFMailComposeViewController *view = [[MFMailComposeViewController alloc] init]; view.mailComposeDelegate = self; [self.navigationController presentModalViewController:view animated:YES]; }]; [view show];} 8
  9. 9. Lição número 11. Substitua delegates por blocks (quase) sempre • Exceção: Quando a classe que executa a ação pode ser dispensada antes do bloco ser executado (NSURLConnection, por exemplo) 9
  10. 10. O ódio renasce com outra face 10
  11. 11. Uma visão de como se livrar do ódio 11
  12. 12. Lições número 2 e 32. Não fique preso à API da Apple3. Não tenha preguiça de implementar do zero 12
  13. 13. Eliminando o ódio com códigoUIWindowUView UILabel UIButton 13
  14. 14. Lição número 44. UIWindow é uma classe obscura e pouco usada (e pessimamente documentada) mas que pode resolver vários problemas de interface. Use com sabedoria. 14
  15. 15. Eliminando o ódio 15
  16. 16. Espalhando o amor• BlockAlertView e BlockActionSheets são open source• github.com/gpambrozio/BlockAlertsAnd- ActionSheets• blog.codecropper.com/2012/01/replicating- tweetbot-alerts-and-action-sheets/• Melhorias à UIAlertView e UIActionSheet 16
  17. 17. Espalhando o amor• Importar 6 arquivos, 3 .h e 3 .m• Copiar um arquivo .h com definições de UI• Copiar os assets ou criar os seus• Alterar UI (opcional) 17
  18. 18. - (IBAction)sendItem:(id)sender{ BlockAlertView *view = [BlocAlertView alertWithTitle:@”Enviar por” message:@”Como deseja enviar ?”]; [view setCancelButtonWithTitle:@”Cancelar” block:nil]; [view addButtonWithTitle:@”Twitter”, block:^{ [self sendWith:kTwitter]; }]; [view addButtonWithTitle:@”Facebook”, block:^{ [self sendWith:kFacebook]; }]; [view setDestructiveButtonWithTitle:@”Apagar”, block:^{ [self removeItem]; }]; [view show];} 18
  19. 19. Espalhando o amor 19
  20. 20. Amor avançado• Fundo e botões são apenas PNGs 20
  21. 21. Amor avançado• É só uma UIView.... [BlockBackground sharedInstance] UIView 21
  22. 22. Amor avançado• BlockTextPromptAlertView 22
  23. 23. Amor animado 23
  24. 24. Lição número 55. Abrir o código é bom: Melhora seu karma, sua reputação e até seu código. 24
  25. 25. Gustavo Ambrozio• @gpambrozio• blog.codecropper.com• github.com/gpambrozio• linkedin.com/in/gustavoambrozio 25

×