2010-11-18 10 views
0

UITableViewControllerは自動的にスクロールしませんか?UITableViewControllerに関する簡単な問題

キーボードで難読化されるUITableViewControllerセル内にテキストフィールドがある場合、フィールドがフォーカスを受け取った場合、UITableViewControllerはフィールドを表示領域にスクロール(または表示)します。私はシンプルなUITableViewControllerUITabBarControllerの中に入れました。UITableViewControllerの変更点は、背景色とセクションヘッダーの表示です...アイデアは?コードが...あります;)

// 
// 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

いいえ、まだあります。 – BoltClock

+0

私はあなたの質問を理解していない、言い換えてください。 –

答えて

0

実際の問題を発見するとすぐに問題がUITableViewControllerではないことがわかりました。私はここに投稿します。

問題は、3つのUIViewControllerの存在が必要なくネストされていた... 助けてくれてありがとう!

1

– scrollToRowAtIndexPath:atScrollPosition:animated:または – scrollToNearestSelectedRowAtScrollPosition:animated:

どちらか何をしたいだろうしています。

+0

これは自動的にはもう起こりませんか? –

+1

ok、コードなしではこれは不可能なのですが、contentViewまたはbackgroundViewにテキストフィールドを追加していますか?私が考えることができるonllの一般的な提案は、あなたがbackgroundViewではなくcontentViewを使うべきだということです。 – griotspeak

関連する問題