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.