是否可以将文本字段与键盘关联?

And*_*kha 5 cocoa-touch objective-c uitextfield uikit ios

在我的视图控制器中,我订阅了UIKeyboardWillShowNotification

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

因此,在我的keyboardWillShow:方法中,我可以从通知中检索有关键盘的一些信息。但是我想要获得的是对实际文本字段的引用,从而使键盘启动。我在Google中找不到该怎么做的方法,我怀疑这可能是不可能的,但有人可能知道。如果确实不可能,那么我想知道是否有可能使之相反-通过引用文本字段来获取有关键盘的信息。谢谢

Swi*_*ect 7

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

您应该使用UITextField委托函数textFieldShouldBeginEditing:

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

这是前面提到的kludge,灵感来自获取当前的第一响应者,而没有使用私有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
}
Run Code Online (Sandbox Code Playgroud)


Fah*_*kar 5

有一种手动方式

if ([firstName isFirstResponder]) {
    // caused due to firstName
} else if ([lastName isFirstResponder]) {
    // caused due to lastName
}
Run Code Online (Sandbox Code Playgroud)

迅速

if firstName.isFirstResponder { // caused due to firstName } 
else
if lastName.isFirstResponder { // caused due to lastName }
Run Code Online (Sandbox Code Playgroud)