区分用户点击和 UITextField 上的编程焦点

Distinguishing between user tap and programmatic focus on UITextField

我有一个独特的问题,我需要区分 UITextField 如何获得焦点。根据这些情况,UI 的处理方式有所不同。我有一系列以编程方式生成的文本输入。

我在这个问题上的第一个尝试是在 UITextField 上放置一个 UITapGestureRecognizer 并在 cellForRowAtIndexPath 中添加手势识别器,但我无法启动关联的方法。

大多数建议都指向使用 UITextField 委托方法,但是,无论 UITextField 是通过用户交互还是以编程方式获得焦点,这些方法都会触发。

任何人都可以提供建议,同时使用 UITextField 委托方法来区分用户交互和以编程方式获得的焦点吗?谢谢!

这有点 hack,但您可以在 UITextField 上添加一个清晰的 UIButton,当点击它时,以编程方式将 UITextField 设置为第一响应者。使用它,您可以在点击按钮时调用的方法中为用户启动的第一个响应执行所有逻辑。

您可以在 UITextField 的子类中或仅在 UITextField 所在的视图控制器/视图中执行此操作。

您可以将 UITextFields 包装在 UIView 中,然后将 UITapGestureRecognizer 添加到 UIView。然后你可以使用这样的东西:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:textField];

    //Checks if the tap was inside the text field
    if (CGRectContainsPoint(textField.bounds, location)){
        // Do something
    }
}