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

时间:2015-04-13 19:19:21

标签: ios objective-c uitextfield

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

您可以在UITextField的子类中执行此操作,也可以只在UITextField所在的View Controller / View中执行此操作。

答案 1 :(得分:0)

您可以将UITextField包装在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
    }
}