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中找不到该怎么做的方法,我怀疑这可能是不可能的,但有人可能知道。如果确实不可能,那么我想知道是否有可能使之相反-通过引用文本字段来获取有关键盘的信息。谢谢
让我强调,@ 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)
有一种手动方式
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)
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |