UITextField inside UITableViewCell: becomeFirstResponder in didSelectRowAtIndexPath

ios, objective-c, uitableview, uitextfield

Solution

If you have a custom cell, then you can do something like this:

@implementation CustomCell

#pragma mark - UIResponder

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (BOOL)becomeFirstResponder
{
    return [self.textField becomeFirstResponder];
}

@end

Then inside the table view delegate:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([cell canBecomeFirstResponder]) {
        [cell becomeFirstResponder];
    }
}

Problem

I am currently trying to get this working. Any help is appreciated. I have a custom `UITableViewCell` that has a `UITextField` inside. When I select the table cell, I would like to make the `UITextField` first Responder. However `[textField becomeFirstResponder];` returns false. ``` - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; UITextField *textField; for (UIView *view in [cell subviews]) { if ([view isMemberOfClass:[UITextField class]]) { textField = ((UITextField *)view); } } [textField becomeFirstResponder]; } ``` As requested, the initialisation of the textfield. This is done in the `UITableViewCell` subclass: ``` - (id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { // Init Textfield _textField = [[UITextField alloc] init]; _textField.backgroundColor = [UIColor clearColor]; _textField.delegate = self; [self addSubview:_textField]; } return self; } ```

Original source