ios - 是否可以获取与键盘关联的文本字段?

标签 ios objective-c cocoa-touch uitextfield uikit

在我的 View Controller 中,我订阅了 UIKeyboardWillShowNotification:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

所以在我的 keyboardWillShow: 方法中,我能够从通知中检索有关键盘的一些信息。但我想要的是获得对调出键盘的实际文本字段的引用。我无法在谷歌中找到如何做到这一点,我怀疑这可能是不可能的,但有人可能知道。如果确实不可能,那么我想知道是否有可能以相反的方式进行 - 通过引用文本字段来获取有关键盘的信息。谢谢

最佳答案

让我强调@iphonic 评论是正确的做法。

You should use UITextField delegate function textFieldShouldBeginEditing:

任何不足都是错误的:UIKeyboardWillShowNotification 假设软件键盘会出现,这是一个非常危险的假设,并且在各种情况下可能会失败 ,从但不限于蓝牙键盘开始。 在模拟器中尝试 cmd-K。

这是前面提到的 kludge,灵感来自 Get the current first responder without using a private API

func keyboardWillShow() {
    let firstResponder = self.findFirstResponder(inView: self.view)
    println("keyboardWillShow for \(firstResponder)")
}

func findFirstResponder(inView view: UIView) -> UIView? {
    for subView in view.subviews as! [UIView] {
        if subView.isFirstResponder() {
            return subView
        }

        if let recursiveSubView = self.findFirstResponder(inView: subView) {
            return recursiveSubView
        }
    }

    return nil
}

关于ios - 是否可以获取与键盘关联的文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981533/

相关文章:

iphone - 来自文档文件夹的界面构建器图像

ios - 以编程方式将按钮添加到 UINavigationController

objective-c - 自动@synthesized ivars 如何影响*real* sizeof(MyClass)?

ios - 如何让透明背景看到主屏幕?

iphone - - (void)applicationWillResignActive :(UIApplication *)application never gets called

ios - Swift:UITextField IBAction - EditingChanged - 按钮保持启用状态,即使文本字段值已更改?

ios - 如何根据播放时间观察MPMoviePlayerController?

mysql - 从服务器下载图像目录并存储在iPhone上

ios - 缩小/放大或移动到 ios 中的其他位置时停止集中用户位置

c++ - OpenCV 和 iOS,将图像提取/裁剪成匹配的部分