SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Melhore sua vida, sua
interface e diga adeus à
      UIAlertView
      Gustavo Pelosi Ambrozio




                                1
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
Amor e ódio pela UIAlertView

•   (aparentemente) Fácil de   •   Delegates
    usar
                               •   Swithes
•   Prático
                               •   Tags

                               •   Constantes




                                                3
@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
- (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
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
@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
- (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
Lição número 1

1. 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
O ódio renasce com
    outra face




                     10
Uma visão de como se
   livrar do ódio




                       11
Lições número 2 e 3

2. Não fique preso à API da Apple

3. Não tenha preguiça de implementar do
   zero




                                          12
Eliminando o ódio com código


UIWindow

UView

        UILabel



    UIButton




                               13
Lição número 4

4. UIWindow é uma classe obscura e pouco
   usada (e pessimamente documentada) mas
   que pode resolver vários problemas de
   interface. Use com sabedoria.




                                            14
Eliminando o ódio




                    15
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
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
- (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
Espalhando o amor




                    19
Amor avançado
• Fundo e botões são apenas PNGs




                                   20
Amor avançado
• É só uma UIView....

                 [BlockBackground
                  sharedInstance]



                   UIView




                                    21
Amor avançado
• BlockTextPromptAlertView




                             22
Amor animado




               23
Lição número 5


5. Abrir o código é bom: Melhora seu karma,
   sua reputação e até seu código.




                                              24
Gustavo Ambrozio

• @gpambrozio
• blog.codecropper.com
• github.com/gpambrozio
• linkedin.com/in/gustavoambrozio

                                    25

Mais conteúdo relacionado

Semelhante a Melhore sua interface com Blocks e elimine o ódio pela UIAlertView

iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014osnipso
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchCampus Party Brasil
 
Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11Rodrigo Borges
 
Construindo interfaces com XIBs reutilizáveis
Construindo interfaces com XIBs reutilizáveisConstruindo interfaces com XIBs reutilizáveis
Construindo interfaces com XIBs reutilizáveisLucas Salton Cardinali
 
Tutorial Criação de Blogger
Tutorial Criação de BloggerTutorial Criação de Blogger
Tutorial Criação de Bloggercleiltoncmm
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para AndroidJorge Cardoso
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidVinícius Thiengo
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
 

Semelhante a Melhore sua interface com Blocks e elimine o ódio pela UIAlertView (13)

iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014
 
Mobile conf
Mobile confMobile conf
Mobile conf
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Caelum Day In Rio
Caelum Day In RioCaelum Day In Rio
Caelum Day In Rio
 
Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
Construindo interfaces com XIBs reutilizáveis
Construindo interfaces com XIBs reutilizáveisConstruindo interfaces com XIBs reutilizáveis
Construindo interfaces com XIBs reutilizáveis
 
Tutorial Criação de Blogger
Tutorial Criação de BloggerTutorial Criação de Blogger
Tutorial Criação de Blogger
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para Android
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView Android
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2
 

Melhore sua interface com Blocks e elimine o ódio pela UIAlertView

  • 1. Melhore sua vida, sua interface e diga adeus à UIAlertView Gustavo Pelosi Ambrozio 1
  • 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. Amor e ódio pela UIAlertView • (aparentemente) Fácil de • Delegates usar • Swithes • Prático • Tags • Constantes 3
  • 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. - (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. 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. @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. - (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. Lição número 1 1. 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. O ódio renasce com outra face 10
  • 11. Uma visão de como se livrar do ódio 11
  • 12. Lições número 2 e 3 2. Não fique preso à API da Apple 3. Não tenha preguiça de implementar do zero 12
  • 13. Eliminando o ódio com código UIWindow UView UILabel UIButton 13
  • 14. Lição número 4 4. UIWindow é uma classe obscura e pouco usada (e pessimamente documentada) mas que pode resolver vários problemas de interface. Use com sabedoria. 14
  • 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. 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. - (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
  • 20. Amor avançado • Fundo e botões são apenas PNGs 20
  • 21. Amor avançado • É só uma UIView.... [BlockBackground sharedInstance] UIView 21
  • 24. Lição número 5 5. Abrir o código é bom: Melhora seu karma, sua reputação e até seu código. 24
  • 25. Gustavo Ambrozio • @gpambrozio • blog.codecropper.com • github.com/gpambrozio • linkedin.com/in/gustavoambrozio 25