gpt4 book ai didi

iphone - 如何以编程方式关闭键盘?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:49 26 4
gpt4 key购买 nike

我需要一种方法来确定当前在 View 中选择的 UITextField。如果不传递引用或标签,这可能吗?

更具体地说,我需要知道选择了哪个 UITextField 以便我可以隐藏键盘。我需要这个的原因是因为我想创建一个 UIToolbar 作为输入附件添加到所有 UITextField。在这个 UIToolbar 上,我将添加一个“完成”按钮,当按下这个按钮时,应该会隐藏当前选定的 UITextField 的键盘。

最佳答案

我假设您的意思是您想知道哪个 UITextField 是第一响应者(这是从键盘获取输入的文本字段)。

对此没有公共(public) API(尽管有一个私有(private) API)。您可以使用每个文本字段委托(delegate)的 textFieldDidBeginEditing: 方法手动跟踪哪个文本字段是第一响应者,或者您可以随时使用一些技巧来找到第一响应者。

这是诀窍。 UIApplication 对象知道哪个对象是第一响应者,并且可以向它发送消息。所以你在 UIResponder 上写了一个这样的类别:

UIResponder+firstResponderHack.h

#import <UIKit/UIKit.h>

@interface UIResponder (firstResponderHack)

+ (UIResponder *)firstResponderByHack;

@end

UIResponder+firstResponderHack.m

#import "UIResponder+firstResponderHack.h"

@interface FirstResponderFinder : NSObject
@property (strong, nonatomic) UIResponder *firstResponder;
@end

@implementation FirstResponderFinder
@synthesize firstResponder = _firstResponder;
@end

@implementation UIResponder (firstResponderHack)

- (void)putFirstResponderIntoFinder:(FirstResponderFinder *)finder {
if (self.isFirstResponder)
finder.firstResponder = self;
}

+ (UIResponder *)firstResponderByHack {
FirstResponderFinder *finder = [FirstResponderFinder new];
// Sending an action to nil sends it to the first responder.
[[UIApplication sharedApplication] sendAction:@selector(putFirstResponderIntoFinder:) to:nil from:finder forEvent:nil];
return finder.firstResponder;
}

@end

然后你可以找到第一响应者,并检查它是否是一个UITextField,像这样:

UIResponder *firstResponder = [UIResponder firstResponderByHack];
if (firstResponder && [firstResponder isKindOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)firstResponder;
// do something with textField
}

关于iphone - 如何以编程方式关闭键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8956704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com