我有一个分组的表格视图,并试图在用户按下Enter键时将新的第一响应者设置为文本字段。

这对我而言并不是什么新鲜事物,在我进行了一些无关的更改之前,我的代码可以正常工作,而现在却没有。 设置其第一响应者时,我有一个指向正确文本字段的指针,什么也没有发生。

焦点完全远离任何文本字段,并且键盘停留在屏幕上。 然后,Enter键和“隐藏键盘”键都将停止工作,直到用户再次重新启动对文本字段的聚焦。

这是代码:

- (void)uiTextFieldShouldReturn:(ObjectEditTextField *)uiTextField
 {
        if ((group.fields.count - 1) > uiTextField.fieldTag) 
        {

       //loop through every table group
        for (int i = uiTextField.fieldTag + 1; i < group.fields.count; i++) {

            //get whatever field is in the row (not necessarily a text field)

            ObjectEditField *field = [group.fields objectAtIndex:i];

            // a check if the field is of type UITextField
            if (field.propName && field.updateObjectOnEdit == YES && [field isKindOfClass:[UITextField class]]) {
                // set the active field
                activeField = field;

                // adjust the table view offset to make sure the text field is visble
                [self setTableViewOffsetForTextField:field];

                // obtain a pointer to the textfield object and set it to be the first responder
                UITextField *textField = (UITextField *)field;
                NSLog(@"field %@", textField.fieldLabel);
                if (![textField.field isFirstResponder]) {

                    [textField.field becomeFirstResponder];
                    return; 
                }
                break;
            }
        }
    }

===============>>#1 票数:0

首先,我将绝对验证您对代码的描述是否“之前有效”以及所做的更改是否“无关”。 根据定义,您对工作代码所做的任何更改都会导致其不再起作用。 如果不是直接的,则由于副作用而间接产生。

从您发布的代码示例中跳出来的所有内容是:

// adjust the table view offset to make sure the text field is visble
[self setTableViewOffsetForTextField:field];

您正在做正确的事情,以确保将包含textField的单元格滚动到视图中。 一种可能性是,当您将其滚动到视图中时会创建该单元格,这可能会导致诸如以下的问题,具体取决于您的其余代码:

  1. 您要发送到的textField成为becomeFirstResponder实例与单元格中实际存在的textField是不同的实例。

  2. 由于调用动画将带有textField的单元格滚动到视图中,因此当您调用becomeFirstResponder时,尚未创建该单元格。

我会退回您所做的所有更改以返回工作版本,并真正确保在预期的时间将正确的textField发送为becomeFirstResponder

===============>>#2 票数:0

通过注释,该字段位于模态(显示)控制器内部。

首先说明-默认情况下,如果模式控制器中的文本字段失去焦点,则不会隐藏键盘。 这由方法-[UIViewController disablesAutomaticKeyboardDismissal]

当视图控制器的模式表示样式设置为UIModalPresentationFormSheet时,此方法的默认实现返回YES,而对于其他表示样式,返回NO。 因此,系统通常不允许将键盘用于模态形式。

这就解释了为什么键盘的行为方式如此。 没有文本字段被聚焦,并且仅因为我们位于模态控制器内部,所以键盘也没有被隐藏。

那么,会发生什么呢? 我们知道当前文本字段将退出第一响应者,或者没有视图成为第一响应者,或者不可编辑的视图成为第一响应者。

好吧,您的整个代码看起来非常可疑:

ObjectEditField *field = [group.fields objectAtIndex:i];

这里有一个类型为ObjectEditField的对象

[field isKindOfClass:[UITextField class]]

现在,我们正在测试字段是否为UITextField的子类。 可疑。 如果它是ObjectEditField ,怎么也可以是UITextField

让我们继续

UITextField *textField = (UITextField *)field;

Okey,让我们假设它是一个UITextField

if (![textField.field isFirstResponder]) {

再次, 可疑。 UITextField没有field属性。

所以:

[textField.field becomeFirstResponder];

在未知对象上被调用。 我们甚至不知道它是否是UITextField

请注意,大多数代码应在IDE中发出警告。

解:

  1. 清理代码,检查警告。
  2. 将一个NSLog(@"%@", textField.field)放在becomeFirstResponder调用之前。 检查日志。

  ask by JMD translate from so

未解决问题?本站智能推荐:

5回复

如何识别哪个文本字段当前是第一响应者

如果屏幕上有多个文本字段,并且在点击它们时键盘弹出,如果您想以编程方式隐藏键盘或辞职第一响应者,但您不知道发送resignFirstResponder消息给? 有没有办法确定哪个对象/ textField应该收到此消息?
1回复

UIActionSheet第一次正常显示,第二次不正确

我的一个iPad应用程序有一个奇怪的问题。 当应用程序启动时,我可以点击一个条形按钮项以显示UIActionSheet,并且从该条形按钮项正常显示操作表,其中包含所有按钮选项和标题。 但是,如果我从此工作表中选择一个操作,它将使用presentViewController来显示另一个非常
3回复

如何在UIAlertView中使文本字段“成为第一响应者”

我在UIAlertView中有两个文本字段。 我希望第二个成为第一个响应者,这样用户就不必点击它。 显示警报视图后,我有以下代码: 唯一的问题是它不起作用。 第一个文本字段中包含了typer。 有任何想法吗? 谢谢你的帮助。
1回复

在UITextView中选择或标记文本,而不使其成为第一响应者

这有可能吗? 我想选择/标记文本,而文本视图不会成为第一响应者。 我已经在UIPopoverController实现了UIPopoverController ,然后在关闭它时, UIToolBar带有下一个和上一个按钮的UIToolBar ,这使我可以选择下一个或上一个结果,并且由于UI
1回复

TabBarImage大小不正确

我正在尝试将60x60像素的图像分配给tabBarItem.image : 我已经阅读了HIG,我应该为视网膜显示屏放置60x60像素的图像。 但是我得到的是尺寸不正确的图像: 如果我将其设置为30x30px,它的外观也会变差(与Retina不同)。
1回复

子视图大小不正确?

首先,我说我不是iOS开发或Objective-C的专家。 我正在为当地慈善机构(教堂)制作应用程序,他们希望它支持轮换。 如果以纵向模式启动,该应用程序将按预期工作,我可以选择新的子视图,然后旋转它可以完美地工作。 但是我需要它工作,以便它们可以随时旋转。 Main视图(启
1回复

在iPad 4上sortUsingComparator排序不正确

我的公司有许多iPad 4s和iPad Air 2s,我们正在向这些设备部署自定义应用程序。 该应用程序可以在iPad Air 2s上正常运行,但是iPad 4s有一个奇怪的错误。 sortUsingComparator方法未正确排序我的数组。 样例代码: 知道有什么问题吗?
1回复

如何将文本字段添加到inputAccessoryView并使textView作为第一响应者

我的代码: 我试着补充一下 最后,但它没有用。 在按下ENTER时委托方法隐藏键盘的另一个问题也不起作用。
1回复

iPad中分屏的显示不正确

我有一个要求,即屏幕方向始终为横向,并且在视图中需要有两个拆分器屏幕。 我使用以下代码渲染两个拆分器屏幕。 布局使得splitViewController1占据60%的视图,splitViewController2占据40%的视图。 现在面临的问题是,在主视图中,拆分器屏幕的详细
2回复

NSDecimalNumber notANumber对于字母“ E”不正确

我试图以这样的方式在UITextField上应用验证,即它不应该接受任何东西,而不是十进制数。 我使用了UITextField以下delegate方法: 它的工作完美,但是有两个问题。 1.当我输入值“ E”或“ e”时,表示接受。 2.一旦接受字母“ E”或“ e”,即接