Mac OS X中的NSResponder
方法-selectNextKeyView
或-nextValidKeyView
是否有等效的iPhone?我知道-becomeFirstResponder
方法,但是当视图层次结构变得更复杂时,找出调用它的视图并不是很好。
必须有某种方法可以找到这个,因为当我在iPhone模拟器中按Tab键时,焦点会正确地转到下一个UITextField
。这让我想知道当我按Tab键时到底发生了什么。有什么想法吗?
更新:这完全符合我的要求,但_nextKeyResponder
是私有API,所以禁止使用。有没有办法在不使用私有API的情况下进行'假'标签键按下?
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// Try to find next responder
UIView *nextResponder = (UIView *)[self.view _nextKeyResponder];
if (nextResponder) {
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
[self.tableView scrollRectToVisible:[self.tableView convertRect:[nextResponder frame] fromView:nextResponder] animated:YES];
} else {
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return NO; // We do not want UITextField to insert line-breaks.
}
答案 0 :(得分:11)
NSResponder
-selectKeyView
或-nextValidKeyView
没有公开的iOS等价物。
当第一个响应者是UITextField
的实例时,按Tab键实例化UIEvent
的私有子类,该子类将传递给-[UIApplication sendEvent:]
,后者又调用-[UIView _nextKeyResponder]
。< / p>
-[UIView _nextKeyResponder]
不能像你想象的那样工作。它将关键视图链视为循环,因此永远不会到达else
块。出于同样的原因,即使有用于合成键盘事件的公共API,您也可能不想使用它。
相反,您可能想要更像UIWebView
基于UIToolbar
的表单输入附件。可以在适当的时候启用和禁用其按钮,并且其委托处理实际的按钮按下操作。
但是,要以一般方式实现此类委托,查看how -[UIView _nextKeyResponder]
is implemented可能会有所帮助。
答案 1 :(得分:0)
在UITextField
委托-textFieldDidEndEditing:
中,在各种文本字段之间切换(例如,通过测试文本字段的tag
属性)。
当您匹配一个文本字段时,请设置另一个文本字段或其他控件以成为下一个响应者。
答案 2 :(得分:0)
我很惊讶其他人似乎没有在iOS上解决这个问题。
我设计了一个解决方案,它可以处理Tab和Shift + Tab,以便前进和后退到iOS上您想要的任何字段,并且不使用任何私有API。