views:

198

answers:

0

I have a UITableView (grouped). In that tableview I have several UITableViewCells, some custom with nib, some default. One Cell (custom) with nib has several UITextfields for address information, thus also one row has zip-code and city in one row.

When I get the keyboard the tableview size seems to be adjusted automatically (vs. another viewController in the app with just a scrollview where I had to code this functionality on my own) so that i can scroll to the bottom of my tableview (and see it) even though the keyboard is up. That's good.

BUT when I click on a textfield the tableview gets either scrolled up, or down, I can't figure out the logic. It seems to be rather random up/down scrolling / contentOffset setting.

So I have bound the Editing Did Begin events of the textfields to a function that has this code.

- (IBAction)textFieldDidBeginEditing:(UITextField *)textField { 
  CGPoint pt;
  CGRect rc = [textField bounds];
  rc = [textField convertRect:rc toView:self.tableView];
  pt = rc.origin;
  pt.x = 0;
  [self.tableView setContentOffset:pt animated:YES];        
  ...
}

This, well, it seems to work most of the time,

BUT it doesn't work if I click the first textfield (the view jumps so that the second row gets to the top and the first row is out of the current visible view frame) AND it also doesn't work if I first select the zip textfield and next the city textfield (both in one row) or vice versa. If I do so, the tableview seems to jump to the (grouped tableview) top of my viewForHeaderInSection(this section with this mentioned cell with all my textfields)

What is is going on ? Why is this happening ? How to fix this ?

Edit This on the other hand behaves as expected (for the two Textviews wit same origin.y)

if (self.tableView.contentOffset.y == pt.y) {
  pt.y = pt.y + 1;
  [self.tableView setContentOffset:pt animated:YES];        
}else {
  [self.tableView setContentOffset:pt animated:YES];                
}

But this is a stupid solution. I wouldn't like to keep it that way. And this also doesn't fix the wrong jumping, when clicking the first textfield at first.