Leo
Leo

Reputation: 1567

Table View scroll when text field begin editing iphone

I have table view controller in iphone application. Table view has two sections. First section has two rows and second section has one row. Second section has a custom table view cell.

Second section has a textfield which hides when text field begin editing and keyboard pops up. I want this table view to scroll when keyboard pops up.

I tried the following code which I came across on different websites but in vain.

Thanks in advance.

-(void) textFieldDidBeginEditing:(UITextField *)textField {

    CGRect textFieldRect = [textField frame];
    [self.tableView scrollRectToVisible:textFieldRect animated:YES];
} 
                          atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}

-(void) textFieldDidBeginEditing:(UITextField *)textField {

    UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview];
    [self.tableView scrollToRowAtIndexPath:[tableView indexPathForCell:cell] 
                          atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}

Upvotes: 0

Views: 4495

Answers (3)

Nick T
Nick T

Reputation: 947

My problem was I was adding the table cell containing the UITextField in the

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {

function. If you do this the automatic UITableView scrolling doesn't work.

So, you have to do some arithmetic to work out when your last row is showing and put your special UITableViewCell in here along with all the others.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

Upvotes: 0

LJ Wilson
LJ Wilson

Reputation: 14427

I have run into this on Static Cell TVC's. There is an issue when overriding viewWillAppear and NOT calling its Super. So if you are doing that, make sure to call

[super viewWillAppear:animated];

at the top of viewWillAppear

Upvotes: 9

idancy
idancy

Reputation: 31

You want to use the setContentOffset method of the table view. Determine the magnitude of the vertical scroll (in pixels), and then:

CGFloat verticalScroll = ... your code here ...
[self.tableView setContentOffset:CGPointMake(0, verticalScroll) animated:YES];

Upvotes: 3

Related Questions