J'ai un UITextField
dans une vue de table sur un UIViewController
(pas un UITableViewController
). Si la vue de la table est sur un UITableViewController
le tableau défilera automatiquement jusqu'au textField
en cours d'édition pour éviter qu'elle ne soit masquée par le clavier. Mais sur un UIViewController
ce n'est pas le cas.
J'ai essayé pendant deux jours de lire les différentes façons d'y parvenir, mais je n'y arrive pas. La chose la plus proche qui défile réellement est.. :
-(void) textFieldDidBeginEditing:(UITextField *)textField {
// SUPPOSEDLY Scroll to the current text field
CGRect textFieldRect = [textField frame];
[self.wordsTableView scrollRectToVisible:textFieldRect animated:YES];
}
Cependant, cela ne fait défiler le tableau que jusqu'à la ligne la plus haute. Ce qui semble être une tâche facile s'est avéré être quelques jours de frustration.
J'utilise ce qui suit pour construire les cellules de la tableView :
- (UITableViewCell *)tableView:(UITableView *)aTableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *identifier = [NSString stringWithFormat: @"%d:%d", [indexPath indexAtPosition: 0], [indexPath indexAtPosition:1]];
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(180, 10, 130, 25)];
theTextField.adjustsFontSizeToFitWidth = YES;
theTextField.textColor = [UIColor redColor];
theTextField.text = [textFieldArray objectAtIndex:indexPath.row];
theTextField.keyboardType = UIKeyboardTypeDefault;
theTextField.returnKeyType = UIReturnKeyDone;
theTextField.font = [UIFont boldSystemFontOfSize:14];
theTextField.backgroundColor = [UIColor whiteColor];
theTextField.autocorrectionType = UITextAutocorrectionTypeNo;
theTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
theTextField.clearsOnBeginEditing = NO;
theTextField.textAlignment = UITextAlignmentLeft;
//theTextField.tag = 0;
theTextField.tag=indexPath.row;
theTextField.delegate = self;
theTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
[theTextField setEnabled: YES];
[cell addSubview:theTextField];
[theTextField release];
}
return cell;
}
Je pense que je peux faire défiler correctement le tableView si je peux passer l'option indexPath.row
dans le textFieldDidBeginEditing
méthode ?
Toute aide est appréciée.