I have a similar setup and becomeFirstResponder seems to work fine.
My custom cell:
@interface CustomCell : UITableViewCell
{
IBOutlet UITextField *costField;
}
And the delegate method from the controller class:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* CellTableIdentifer = @"CellTableIdentifer";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellTableIdentifer];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
NSUInteger row = [indexPath row];
ReceiptItem *receiptItem = [models objectAtIndex:row];
if (receiptItem == justAddedItem)
{
[cell.costField becomeFirstResponder];
justAddedItem = nil;
}
justAddedItem is set when the user clicks the button to add a new row to the table.