UITextField не может стать первым респондентом, если добавлен в UITableViewCell через accessoryView - PullRequest
0 голосов
/ 20 декабря 2011

Как и многие другие пользователи, я пытаюсь установить бросок UITextField в UITableViewCell, который будет использоваться для редактирования строки. Но вместо добавления нового представления я пытаюсь использовать свойство accessoryView. Сначала я попробовал это ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        UITextField *textField =[[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 200.0f, 44.0f)];
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.accessoryView = textField;
        [textField becomeFirstResponder];
}

... и UITextField добавлен правильно, но мне нужно снова нажать на него, чтобы отобразилась клавиатура. Однако, если я сделаю это ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        UITextField *textField =[[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 200.0f, 44.0f)];
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        [cell addSubview:textField];
        [textField becomeFirstResponder];
}

... это работает, клавиатура появляется, но я не получаю никаких других преимуществ от ее использования в качестве accessoryView (более удобное позиционирование при перемещении других видов вокруг нее). Я полагаю, что addSubview: call изменяет цепочку респондента или что-то в этом роде и позволяет моему UITextField стать первым респондентом, но подумал, что, возможно, есть другой способ сделать это, позволяя мне вместо этого установить accessoryView ячейки. Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Надеюсь, вы знаете о делегате из текстового поля. Попробуйте таким образом .... может быть, это поможет вам.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

if(theTextField == yourtextfieldname) {
    [yourtextfieldname resignFirstResponder];
}

return YES;
}
0 голосов
/ 21 декабря 2011

Я ненавижу свое решение, но оно работает, и я готов к лучшему.

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

    CGRect detailTextLabelFrame = cell.detailTextLabel.frame;
    detailTextLabelFrame.origin.x -= 100.0f;
    detailTextLabelFrame.size.width += 100.0f;

    UITextField *textField = [[UITextField alloc] initWithFrame:detailTextLabelFrame];

    cell.detailTextLabel.hidden = YES;
    cell.accessoryView = textField;

    // These are the two lines that made it work, but it feels ugly    
    [cell.accessoryView removeFromSuperview];
    [cell addSubview:cell.accessoryView];

    [cell.accessoryView becomeFirstResponder];
}
...