如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者

Posted

技术标签:

【中文标题】如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者【英文标题】:UITextField unable to become first responder if added to UITableViewCell via accessoryView 【发布时间】:2011-12-20 06:32:43 【问题描述】:

像许多其他用户一样,我正在尝试将 UITextField 设置为 UITableViewCell 以用于编辑行。但我没有添加新视图,而是尝试使用附件视图属性。一开始我试过这个...

- (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];

...它起作用了,键盘出现了,但是,我没有得到将它作为附件视图的任何其他好处(在其他视图周围移动时更容易定位)。我想 addSubview: 调用正在改变响应者链或其他东西,并允许我的 UITextField 成为第一响应者,但认为也许有另一种方法可以让我设置单元格的附件视图。谢谢。

【问题讨论】:

【参考方案1】:

我讨厌我的解决方案,但它确实有效,并且正在寻找更好的方法。

- (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];

【讨论】:

【参考方案2】:

我希望您了解文本字段委托。试试这种方式....可能会对您有所帮助。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 

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


return YES;

【讨论】:

嗨,Emon,实际上我什至无法显示键盘。但是,是的,我正在使用类似的东西来关闭键盘。

以上是关于如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

在drupal 7中,由于多个附件,将表单添加到视图会产生多个相同的表单,如何只保留一个?

在ios中维护附件视图的状态

将附件视图添加到“打开/保存”对话框时,布局约束不良

iPhone - 向键盘现有附件视图添加一个按钮(来自 UIWebView 的键盘)

TextField 输入附件视图问题

UITableViewCell,两个单元格都获得了附件视图