2010-11-18 46 views
0

UITableViewController不会自动滚动吗?有关UITableViewController的简单问题

如果UITableViewController单元格中的文本字段会被键盘混淆,如果该字段接收到焦点,则UITableViewController将该字段滚动(或应该)该字段到可见区域。我在简单的UITabBarController中有一个简单的UITableViewController,在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 2010-11-18 02:43:04

+0

我不明白你的问题,请转述。 – 2010-11-18 02:43:47

回答

0

我发现问题它不是UITableViewController,只要我发现真正的问题,我会在这里发布它。

问题是没有需要嵌套3 UIViewControllers的存在... 感谢您的帮助!

1

要么– scrollToRowAtIndexPath:atScrollPosition:animated:– scrollToNearestSelectedRowAtScrollPosition:animated:

可能是你想要什么。

+0

它不应该自动发生? – 2010-11-18 03:07:51

+1

好的,没有代码,这几乎不可能计算出来,但是你是否将textfield添加到contentView或backgroundView?我能想到的一般建议是你应该使用contentView而不使用backgroundView。 – griotspeak 2010-11-18 04:17:07