1

这是“它在一段时间前工作”的故障排除工作之一。

我正在研究文档预览视图控制器,其中是一个滚动视图,它本身包含代表每个文档的 UIView 的子类。我将这个模型与 Keynote 处理其文档预览的方式非常接近,除了我水平构建滚动视图并使用分页。但是标准的用户体验是存在的:长按文档图标会导致所有文档图标开始抖动,导航栏有 + 按钮和编辑按钮等。

手头的问题是,当您点击文档的名称时,我会隐藏所有其他文档,将正在编辑的文档移到前面和中间,构建一个新的文本编辑字段,将其作为子视图添加到真实姓名标签上,然后将其设置为第一响应者;但是

     [editNameTextField setClearButtonMode:UITextFieldViewModeWhileEditing];

当用户点击清除按钮时,虽然在编辑字段中正确显示并没有采取任何行动。

我无法弄清楚我可能做了什么导致它不起作用 - 它曾经是!

我的第一个想法是不知何故我这个子类的实例不再是这个文本编辑字段的委托。为了尝试确认/否认这一点,我篡夺了文档预览的图像视图上的点击以将委托属性与自身进行比较,并且它通过了。

if (editNameTextField) {
    NSLog(@"editNameTextField is still active");
    if ([editNameTextField.delegate isEqual:self]) {
        NSLog(@"we're still the delegate for the editNameTextField");
    }
}

在编辑字段中编辑文本工作正常。正确按下 Return/Done 键会发送代表消息textFieldShouldReturn:

在调查这个问题时,我实现了委托方法textFieldShouldClear:,只是为了在方法被调用时写一条日志消息(当然返回 YES)。它永远不会被调用。

我的下一个想法是,也许一个子视图覆盖了清除按钮所在的区域。所以我实现textFieldShouldBeginEditing:并利用这个机会把我的文本字段放在前面。这也没有改变任何东西。我在那里设置了一个调试器断点,以便在调用它时播放声音,它被调用了,所以我知道我的文本编辑字段在最前面。

我只剩下一个故障排除策略:通过快照倒退,直到它再次开始工作。在这样做之前,我想我会看看这里有没有经验丰富的人对下一步要尝试什么有任何建议。

4

1 回答 1

2

Where are you adding the textfield? As a subview of the scrollView? If you added the textfield and it is out of bounds of its parent view it won't receive any touches.

You can try and not call becomeFirstResponder and see if clicking it will show keyboard. Another possible error might be that the parent view of the UITextField has userInteractionEnabled = NO.

Without seeing more code I'm afraid I can not offer more solutions.

于 2012-05-28T22:50:11.627 回答