这些NSResponder
方法-selectNextKeyView
或-nextValidKeyView
Mac OS X 是否有等效的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. }
lemnar.. 11
对于NSResponder
's -selectKeyView
或者没有公共iOS等价物-nextValidKeyView
.
当第一个响应者是一个实例时UITextField
,按下tab会实例化一个私有子类,UIEvent
然后传递给-[UIApplication sendEvent:]
它-[UIView _nextKeyResponder]
.
-[UIView _nextKeyResponder]
不像你想象的那样工作.它将关键视图链视为循环,因此else
永远不会到达您的块.出于同样的原因,即使有用于合成键盘事件的公共API,您也可能不想使用它.
相反,你可能想要更像UIWebView
是UIToolbar
基于形式的输入附件.可以在适当的时候启用和禁用其按钮,并且其委托处理实际的按钮按下操作.
为了实现在一般的方式这样一个代表,但是,它可能会有所帮助看看如何-[UIView _nextKeyResponder]
实现.
对于NSResponder
's -selectKeyView
或者没有公共iOS等价物-nextValidKeyView
.
当第一个响应者是一个实例时UITextField
,按下tab会实例化一个私有子类,UIEvent
然后传递给-[UIApplication sendEvent:]
它-[UIView _nextKeyResponder]
.
-[UIView _nextKeyResponder]
不像你想象的那样工作.它将关键视图链视为循环,因此else
永远不会到达您的块.出于同样的原因,即使有用于合成键盘事件的公共API,您也可能不想使用它.
相反,你可能想要更像UIWebView
是UIToolbar
基于形式的输入附件.可以在适当的时候启用和禁用其按钮,并且其委托处理实际的按钮按下操作.
为了实现在一般的方式这样一个代表,但是,它可能会有所帮助看看如何-[UIView _nextKeyResponder]
实现.