2010-11-18 11 views
0

UITableViewController scrollt nicht mehr automatisch?Einfaches Problem in Bezug auf UITableViewController

Wenn Sie ein Textfeld in einer UITableViewController Zelle haben, die von der Tastatur verschleiert würde, wenn das Feld den Fokus erhält, scrollt (oder sollte es) das Feld in einen sichtbaren Bereich (UITableViewController). Ich habe eine einfache UITableViewController innerhalb einer einfachen UITabBarController, die Änderungen ive gemacht in der UITableViewController sind die Hintergrundfarbe und die Abschnitt Header Ansichten ... irgendwelche Ideen? Es ist der 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

Nein, sie tun es immer noch. – BoltClock

+0

Ich verstehe Ihre Frage nicht, bitte umformulieren. –

Antwort

0

Ich entdeckte, dass das Problem nicht der UITableViewController ist, sobald ich das wirkliche Problem entdecke, werde ich es hier veröffentlichen.

Das Problem war die Existenz von 3 UIViewControllers geschachtelt ohne Notwendigkeit ... Danke für die Hilfe!

1

entweder – scrollToRowAtIndexPath:atScrollPosition:animated: oder – scrollToNearestSelectedRowAtScrollPosition:animated:

sind wahrscheinlich das, was Sie wollen.

+0

Es sollte nicht mehr automatisch passieren? –

+1

ok, ohne code ist das fast unmöglich zu berechnen, aber fügst du das textfield zu contentView oder backgroundView hinzu? Der allgemeine Vorschlag, den ich mir vorstellen kann, ist, dass Sie contentView und nicht backgroundview verwenden sollten. – griotspeak