Mobile conf

493 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
493
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mobile conf

  1. 1. UITableView 1 @dchohfi
  2. 2. Diego Chohfi Turini Instutor na Caelum Desenvolvedor na MakeYou@dchohfi 2 @dchohfi
  3. 3. EpicLyrics BusaoSP 3 @dchohfi
  4. 4. UITableViewUITableViewStylePlain UITableViewStyleGrouped 4 @dchohfi
  5. 5. UITableView UITableViewStylePlain muito rápidoUIScrollView customizável 5 @dchohfi
  6. 6. section }NSIndexPath} rows }NSIndexPath section} rows 6 @dchohfi
  7. 7. Header (UIView) UITableViewCellTudo é classe! Lembre-seque é orientado a objetos!7 @dchohfi
  8. 8. NSIndexPath informaçãoUITableViewCellinitWithStyle:reuseIdentifier:UITableViewCellStyle 8 @dchohfi
  9. 9. UITableView <UITableViewDataSource>@interface DCViewController : UIViewController <UITableViewDataSource> self.tableView.dataSource = self; 9 @dchohfi
  10. 10. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 10 @dchohfi
  11. 11. 100 linhas = 100 UITableViewCellUITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"]; 11 @dchohfi
  12. 12. dequeueReusableCellWithIdentifier:UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];if(!cell){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];} 12 @dchohfi
  13. 13. Ok, mas como sair disso: 13 @dchohfi
  14. 14. Pra isso: 14 @dchohfi
  15. 15. 15 @dchohfi
  16. 16. Primeiro de tudo: precisamos aprender a customizar uma célula @interface DCCustomCell : UITableViewCell @end 16 @dchohfi
  17. 17. Podemos até criar um XIB pra ela :D desenhamos a tela temos que LEMBRAR do identifier alteramos a classe ta interfaceprincipal para a nossa customizadae para acessar os elementos visuais, criamos IBOutlet 17 @dchohfi
  18. 18. e a API evoluiu bastante :D iOS > 5- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier rigistramos o novo xib na tabela UINib *customNib = [UINib nibWithNibName:@"DCCustomCell" bundle:[NSBundle mainBundle]]; [self.tableView registerNib:customNib forCellReuseIdentifier:@"DCCustomCell"]; e podemos remover um if! o/- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ DCCustomCell *cell = (DCCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"DCCustomCell"]; 18 @dchohfi
  19. 19. 19 @dchohfi
  20. 20. Agora precisamos melhorar a performance. Primeira regra: NUNCA FAÇA DOWNLOAD SÍNCRONONSURL *avatarURL = [NSURL URLWithString:user[@"profile_image_url"]];self.avatar.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:avatarURL]];a cada download da imagem, tudo trava, inclusive seu usuário.. 20 @dchohfi
  21. 21. open source FTW! 21 @dchohfi
  22. 22. SDWebImage 22 @dchohfi
  23. 23. Muito simples![self.avatar setImageWithURL:[NSURL URLWithString:user[@"profile_image_url"]]]; 23 @dchohfi
  24. 24. Mas, ainda temos problema de performance cada subview é desenhada separadamente e agora? temos que desenhar tudo de uma vez! sem xib :( 24 @dchohfi
  25. 25. Podemos desenhar todos os conteúdos estáticos de uma vez só! - (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width NSString withFont:(UIFont *)font lineBreakMode:(NSLineBreakMode)lineBreakMode; UIImage - (void)drawInRect:(CGRect)rect; quando a célula for desenhada - (void)drawRect:(CGRect)rect; 25 @dchohfi
  26. 26. Porém sempre que o conteúdo da célula mudar, precisamos mandar ela se redesenhar. setNeedsDisplay- (void) setTweetData: (NSDictionary *) tweet { self.twitterData = tweet; NSURL *userAvatarUrl = [NSURL URLWithString:self.twitterData[@"user"][@"profile_image_url"]]; [self.avatar setImageWithURL:userAvatarUrl]; [self setNeedsDisplay];} 26 @dchohfi
  27. 27. 27 @dchohfi
  28. 28. E quando queremos celulas com alturas variaveis?podemos saber o tamanho de um texto, com uma fonte, de maneira simples: - (CGSize)sizeWithFont:(UIFont *)font NSString constrainedToSize:(CGSize)size;agora nós temos o controle :D - (CGFloat) tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath 28 @dchohfi
  29. 29. Cuidados que precisamos tomarreutilizar as celulas sempre que possível evitar desenhar todas as subviews, drawRect: FTW! evitar sombras e bordas arredondas evitar desenhar elementos com coordenadas quebradas deixar tudo calculado antes 29 @dchohfi
  30. 30. CUIDADO MANO! 30 @dchohfi
  31. 31. 10% de desconto nos livros da Cupom: MOBILECONF no site10% de desconto nos cursos da Caelum também o/ 31 @dchohfi
  32. 32. valeu galera :D 32 @dchohfi

×