【问题标题】:Telling a UITextField to become first responder while embedded in a UITableViewCell告诉 UITextField 在嵌入 UITableViewCell 时成为第一响应者
【发布时间】:2010-12-16 12:14:38
【问题描述】:

我有一个UITextField,它是UITableViewCell 的子视图。

当我的视图加载时,我希望文本字段成为第一响应者。我有一个指向表格单元格中文本字段的指针,所以我正在尝试这样做:

[myTextField becomeFirstResponder];

无论何时调用,这都会始终返回NO,根据文档,这意味着文本字段拒绝成为第一响应者......我做错了什么?

编辑:

textfield 正确响应被触摸。然后它会调出键盘。只有在以编程方式将其告知becomefirstresponder 时才会发生问题。

【问题讨论】:

标签: ios uitableview cocoa-touch uitextfield first-responder


【解决方案1】:

我作为子视图添加到分组表视图单元格的文本字段遇到了同样的问题 - 但经过一番摸索后找到了解决方案。

假设您在 cellForRowAtIndexPath 方法中为文本字段添加了标签,您可以执行以下操作:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    myTextField = (UITextField *)[cell viewWithTag:kMyTextFieldTag];
    [myTextField becomeFirstResponder];
}

【讨论】:

  • 我也在做同样的事情,而且它是第一次工作。但是当我推送另一个视图并返回时,相同的代码不起作用。
  • 和我一样的问题,新 XCode 的一些问题 :(
【解决方案2】:

在 -(void)viewDidLoad 中调用它会起作用。

-(void)viewDidLoad{
   [super viewDidLoad];
   // Do any additional setup after loading the view.
   [self.myTextField becomeFirstResponder] 

   //... any other code you need 
}

【讨论】:

    【解决方案3】:

    UITextField 成为cellForRowAtIndexPath 内的第一响应者时,我没有显示光标。文本字段可以很好地工作,但它没有在字段内显示闪烁的光标。当您按住时,缩放放大也不会显示光标。

    我通过在 didSelectRowAtIndex 方法中设置我的 becomeFirstResponder 解决了这个奇怪的问题。

    【讨论】:

    • 我也遇到了光标不显示的问题,必须将 uitableview 的编辑属性设置为 YES 才能正常工作。您是否设法解决了缺少光标的问题?
    【解决方案4】:

    当我尝试向它发送第一响应者时,结果显示文本字段为零。 在生命周期的后期发送becomeFirstResponder 有效。

    【讨论】:

    • @Jaserien 谢谢。我也遇到了同样的问题,并用你的解决方案解决了。但是我仍然无法理解文本字段在视图生命周期中是如何变为空的,我还没有在任何地方发布它,是 ARC 正在这样做吗?还有解决这种情况的最好方法是什么,我应该重新分配吗?
    • 如果某些东西对 textField 有强引用(即,它作为子视图添加到另一个视图),它不应该在 ARC 项目中为空。检查你的 textField 是否有一个强大的引用来支持它。
    【解决方案5】:

    你的 UITableView editing 属性是否设置为YES

    【讨论】:

    • 没有。 UITextField 是我手动添加的子视图,默认情况下不是单元格的一部分。我不知道 tableview 需要处于编辑模式?这不会显示删除按钮吗?
    • 我的错,我第一次读的太快了。我刚刚尝试了你正在做的事情,它在这里工作。您在 View 生命周期的哪个阶段尝试将 becomeFirstResponder 发送到文本字段?
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多