2010-11-18 11 views
0

UITableViewController ne défile plus automatiquement?Problème simple concernant UITableViewController

Lorsque vous avez un champ de texte à l'intérieur d'une cellule UITableViewController qui serait obscurci par le clavier, si le champ reçoit le focus, le UITableViewController fait défiler (ou devrait) le champ vers une zone visible. J'ai un simple UITableViewController à l'intérieur d'un simple UITabBarController, les changements effectués dans le UITableViewController sont la couleur de fond et les vues d'en-tête de section ... des idées? Il y a le code ...;)

// 
// SolicitaTaxiPhone.h 
// ExpressTaxi 
// 
// Created by Paulo Ferreira on 11/5/10. 
// Copyright 2010 MobileLifeUtils.com. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface SolicitaTaxiPhone : UITableViewController <UITextFieldDelegate> { 
    NSArray *aGruposCamposSolicitacao; 
} 

@end 


// 
// SolicitaTaxiPhone.m 
// ExpressTaxi 
// 
// Created by Paulo Ferreira on 11/5/10. 
// Copyright 2010 MobileLifeUtils.com. All rights reserved. 
// 

#import "SolicitaTaxiPhone.h" 

#import <QuartzCore/QuartzCore.h> 

@implementation SolicitaTaxiPhone 


#pragma mark - 
#pragma mark Initialization 

- (id)initWithStyle:(UITableViewStyle)style { 
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
    self = [super initWithStyle:style]; 

    self.title = @"Solicitar Táxi"; 
    self.navigationItem.title = @"Solicitar Táxi"; 

    //[self.tableView setBackgroundColor:[UIColor blackColor]]; 

    UITextField *tfOrigem = [UITextField new]; 
    [tfOrigem setFrame:CGRectMake(10.0f, 10.0f, 240.0f, 25.0f)]; 
    [tfOrigem setClearButtonMode:UITextFieldViewModeWhileEditing]; 
    [tfOrigem setAutocorrectionType:UITextAutocorrectionTypeNo]; 
    [tfOrigem setAutocapitalizationType:UITextAutocapitalizationTypeWords]; 
    [tfOrigem setReturnKeyType:UIReturnKeyDone]; 

    UIButton *btLocalizacaoAtual = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btLocalizacaoAtual setFrame:CGRectMake(250.0f, 1.0f, 40.0f, 40.0f)]; 
    [btLocalizacaoAtual setTitle:@"GPS" forState:UIControlStateNormal]; 

    NSArray *aCamposOrigem = [NSArray arrayWithObjects:tfOrigem, btLocalizacaoAtual, nil]; 

    NSDictionary *dCamposOrigem = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Endereço de Origem", aCamposOrigem, nil] 
                 forKeys:[NSArray arrayWithObjects:@"titulo", @"componentes", nil] 
            ]; 


    UITextField *tfComplemento = [UITextField new]; 
    [tfComplemento setFrame:CGRectMake(10.0f, 10.0f, 280.0f, 25.0f)]; 
    [tfComplemento setClearButtonMode:UITextFieldViewModeWhileEditing]; 
    [tfComplemento setAutocorrectionType:UITextAutocorrectionTypeNo]; 
    [tfComplemento setAutocapitalizationType:UITextAutocapitalizationTypeWords]; 
    [tfComplemento setReturnKeyType:UIReturnKeyDone]; 

    NSArray *aCamposComplemento = [NSArray arrayWithObjects:tfComplemento, nil]; 

    NSDictionary *dCamposComplemento = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Complemento do Endereço", aCamposComplemento, nil] 
                   forKeys:[NSArray arrayWithObjects:@"titulo", @"componentes", nil] 
            ]; 

    UITextField *tfDestino = [UITextField new]; 
    [tfDestino setFrame:CGRectMake(10.0f, 10.0f, 240.0f, 25.0f)]; 
    [tfDestino setClearButtonMode:UITextFieldViewModeWhileEditing]; 
    [tfDestino setAutocorrectionType:UITextAutocorrectionTypeNo]; 
    [tfDestino setAutocapitalizationType:UITextAutocapitalizationTypeWords]; 
    [tfDestino setReturnKeyType:UIReturnKeyDone]; 
    //[tfDestino setDelegate:self]; 

    UIButton *btReversoDestino = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btReversoDestino setFrame:CGRectMake(250.0f, 1.0f, 40.0f, 40.0f)]; 
    [btReversoDestino setTitle:@"RD" forState:UIControlStateNormal]; 

    NSArray *aCamposDestino = [NSArray arrayWithObjects:tfDestino, btReversoDestino, nil]; 

    NSDictionary *dCamposDestino = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Endereço de Destino", aCamposDestino, nil] 
                   forKeys:[NSArray arrayWithObjects:@"titulo", @"componentes", nil] 
            ]; 

    aGruposCamposSolicitacao = [[NSArray arrayWithObjects:dCamposOrigem, dCamposComplemento, dCamposDestino, nil] retain]; 

    return self; 
} 


#pragma mark - 
#pragma mark View lifecycle 

/* 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 
*/ 

/* 
- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
} 
*/ 

/* 
- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
} 
*/ 
/* 
- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
} 
*/ 
/* 
- (void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 
} 
*/ 
/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 


#pragma mark - 
#pragma mark Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return [aGruposCamposSolicitacao count]; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return 1; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSArray *aCamposSecao = [[aGruposCamposSolicitacao objectAtIndex:indexPath.section] valueForKey:@"componentes"]; 

    for (id componenteAtual in aCamposSecao) { 
     [cell.contentView addSubview:componenteAtual]; 
    } 

    return cell; 
} 

- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 50; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    UIView *vwTitulo = [[UILabel alloc] init]; 
    [vwTitulo setBackgroundColor:[UIColor clearColor]]; 

    UIView *vwBackgroundTitulo = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 300.0f, 30.0f)]; 
    [vwBackgroundTitulo setBackgroundColor:[UIColor yellowColor]]; 
    vwBackgroundTitulo.layer.cornerRadius = 10.0f; 

    UILabel *lblTitulo = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 00.0f, 300.0f, 28.0f)]; 
    [lblTitulo setBackgroundColor:[UIColor clearColor]]; 
    [lblTitulo setTextColor:[UIColor blackColor]]; 
    [lblTitulo setTextAlignment:UITextAlignmentCenter]; 
    [lblTitulo setFont:[UIFont boldSystemFontOfSize:18.0f]]; 
    [lblTitulo setText:[[aGruposCamposSolicitacao objectAtIndex:section] valueForKey:@"titulo"]]; 

    [vwBackgroundTitulo addSubview:lblTitulo]; 
    [vwTitulo addSubview:vwBackgroundTitulo]; 

    return vwTitulo; 
} 

/* 
// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 
*/ 

/* 
// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 
    } 
} 
*/ 


/* 
// Override to support rearranging the table view. 
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { 
} 
*/ 


/* 
// Override to support conditional rearranging of the table view. 
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Return NO if you do not want the item to be re-orderable. 
    return YES; 
} 
*/ 


#pragma mark - 
#pragma mark Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here. Create and push another view controller. 
    /* 
    <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; 
    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
    */ 
} 


#pragma mark - 
#pragma mark UITextFieldDelegate 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    NSLog(@"Chamou essa jossa!"); 
    UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview]; 
    [self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    [self isFirstResponder]; 
} 

#pragma mark - 
#pragma mark Memory management 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Relinquish ownership any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. 
    // For example: self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 


@end 
+2

Non, ils le font toujours. – BoltClock

+0

Je ne comprends pas votre question, veuillez la reformuler. –

Répondre

0

J'ai découvert que le problème n'est pas le UITableViewController, dès que je découvre le vrai problème, je le posterai ici.

Le problème était l'existence de 3 UIViewControllers imbriqués sans besoin ... Merci pour l'aide!

1

soit – scrollToRowAtIndexPath:atScrollPosition:animated: ou – scrollToNearestSelectedRowAtScrollPosition:animated:

sont probablement ce que vous voulez.

+0

Cela ne devrait plus se produire automatiquement? –

+1

ok, sans code c'est presque impossible de figurer, mais est-ce que vous ajoutez le champ de texte pour le contentView ou le backgroundView? La seule suggestion générale que je peux penser est que vous devriez utiliser contentView et NOT backgroundView. – griotspeak