Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 检测UITextField失去焦点_Iphone_Objective C_Ipad_Uitextfield_Protocols - Fatal编程技术网

Iphone 检测UITextField失去焦点

Iphone 检测UITextField失去焦点,iphone,objective-c,ipad,uitextfield,protocols,Iphone,Objective C,Ipad,Uitextfield,Protocols,我在谷歌和heree上搜索了很多,但没有找到有用的东西 我有两个文本字段,无法识别哪一个失去了焦点。 我尝试了所有的选择,但什么都没有 这里是文本字段的编辑: - (void) textFieldDidEndEditing:(UITextField *)textField { NSLog(@"%@", [textField state]); NSLog(@"%d", [textField isSelected]); NSLog(@"%d", [textField isFirstR

我在谷歌和heree上搜索了很多,但没有找到有用的东西

我有两个文本字段,无法识别哪一个失去了焦点。
我尝试了所有的选择,但什么都没有

这里是
文本字段的编辑

- (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...
  }
}
所有NSLog返回0!为什么

如何检测失去焦点?这个方法每次我按下键盘按钮都会调用,不只是在最后
还有其他选择吗

编辑
我不想从文本切换,但我想在屏幕上任意点击时检测失去焦点。(键盘将关闭或不关闭,且文本字段上不存在插入符号)


谢谢。

创建文本字段时,请为其指定不同的标记:

#define kSomeTag 100
textField.tag = kSomeTag;
在-(void)textfielddidediting:(UITextField*)textField方法中,可以通过查询其标记来判断哪个textField结束了编辑:

if (textField.tag == kSomeTag) {
    // do something
}
带有标记的UITextField在textFieldShouldReturn方法中失去焦点


这将帮助您从一个文本字段切换到另一个文本字段…只需在所有文本字段中递增设置标记,例如:0、1、2、3…等

以处理在文本字段之外的点击,您可以在视图控制器中覆盖
触摸开始

- (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
    }

    ...
}

这并不是一个直接的答案,因为你问过如何处理失去注意力的情况。我认为有时候有明确的“保存”和“取消”按钮可以关闭是很好的。尤其是在文本视图中,您希望保留返回键以供其预期用途

这是一个向键盘添加工具栏的类,其中包含“完成”和“取消”按钮。我现在已经在iOS 8上运行了。我对iOS非常陌生,所以可能有更好的方法来做到这一点。随时听取关于如何改进的建议

DismissableTextView.h

#import <UIKit/UIKit.h>

@interface DismissableTextView : UITextView

@end

不,不,这不对!!这样,当我在文本字段外单击而不使用ShouldReturn时,我就不能失去焦点!!不,不工作,因为当我在文本字段外单击时,没有任何更改!标签是一样的,它无关紧要!!!您可以在
textfield shouldBeginediting
中通过检查第一响应者来处理它:这不是很可靠<代码>触摸开始不是每次我出于某种原因触摸屏幕上的某个东西时都会调用
#import <UIKit/UIKit.h>

@interface DismissableTextView : UITextView

@end
#import "DismissableTextView.h"

@implementation DismissableTextView

- (instancetype)init
{
    self = [super init];
    if (self) {
        [self setInputView];
    }
    return self;
}

- (id) initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        [self setInputView];
    }
    return self;
}

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self setInputView];
}

- (void) setInputView {
    [self createToolbar];
}
-(void) createToolbar {

    // Create toolbar for the keyboard so it can be dismissed...
    UIToolbar* toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
    toolbar.barStyle = UIBarStyleDefault;
    toolbar.items = [NSArray arrayWithObjects:
                           [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelClicked)],
                           [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                           [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneClicked)],
                           nil];
    [toolbar sizeToFit];

    self.inputAccessoryView = toolbar;
}

- (IBAction)didBeginEditDescription:(id)sender
{
}

-(void)cancelClicked{

    // respond to cancel click in the toolbar
    [self resignFirstResponder];
}

-(void)doneClicked{

    // respond to done click in the toolbar
    [self resignFirstResponder];
}

@end