关于UITableViewController的简单问题

时间:2010-11-18 02:40:56

标签: iphone objective-c uitableview

UITableViewController不再自动滚动了?

UITableViewController单元格中有一个文本字段被键盘混淆时,如果该字段获得焦点,则UITableViewController滚动(或应该)该字段到可见区域。我在一个简单的UITableViewController中有一个简单的UITabBarController,我在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 个答案:

答案 0 :(得分:1)

– scrollToRowAtIndexPath:atScrollPosition:animated:– scrollToNearestSelectedRowAtScrollPosition:animated:

可能就是你想要的。

答案 1 :(得分:0)

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

问题是3个UIViewControllers的存在是否需要嵌套... 谢谢你的帮助!