检测UITextField失去焦点

elp*_*elp 13 iphone protocols objective-c uitextfield ipad

我搜索了很多谷歌搜索和heree,但没有任何用处.

我有两个文本域,我无法识别哪一个失去了焦点.
我尝试了所有选项,但没有.

这里textFieldDidEndEditing:

- (void) textFieldDidEndEditing:(UITextField *)textField {  
  NSLog(@"%@", [textField state]);
  NSLog(@"%d", [textField isSelected]);
  NSLog(@"%d", [textField isFirstResponder]);
  NSLog(@"%d", [textField isHighlighted]);
  NSLog(@"%d", [textField isTouchInside]);

  if ( ![textField isFirstResponder] || ![textField isSelected] ) {
  //if ( [textField state] != UIControlStateSelected) {
    NSLog(@"not selected!");
    [...]
    // remove view / etc...
  }
}
Run Code Online (Sandbox Code Playgroud)

所有NSLog都返回0!为什么?!?

我如何检测丢失的焦点?每次按下键盘按钮时都会调用此方法,不仅仅是在结尾!
还有其他选择吗?

编辑:
我不想切换文本,但我想在屏幕上点击任何时候检测丢失的焦点.(键盘将关闭或不关闭,插入符号不在文本字段中)!

谢谢.

Ale*_*iko 3

要处理点击外部文本字段,您可以touchesBegan在视图控制器中覆盖:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{
    UITouch *touch = [[event allTouches] anyObject];
    if ([textField1 isFirstResponder] && (textField1 != touch.view))
    {
        // textField1 lost focus
    }

    if ([textField2 isFirstResponder] && (textField2 != touch.view))
    {
        // textField2 lost focus
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是很可靠..由于某种原因,每次我触摸屏幕上的某些东西时,不会调用“touchesBegan” (3认同)