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
答案 0 :(得分:1)
– scrollToRowAtIndexPath:atScrollPosition:animated:
或
– scrollToNearestSelectedRowAtScrollPosition:animated:
可能就是你想要的。
答案 1 :(得分:0)
我发现问题不是UITableViewController,只要我发现真正的问题,我就会在这里发布。
问题是3个UIViewControllers的存在是否需要嵌套... 谢谢你的帮助!