我试图通过我的应用程序变得聪明。
我有5个UITextField
个对象堆叠在一起。我希望用户能够在第一个UITextField
中输入内容,然后按下'下一步'在键盘上,焦点移动到下一个UITextField
。
我的策略是拥有一系列UITextField
个对象,当TextFieldOnEditingDidEnd
被调用时,我会调用' BecomeFirstResponder()
'在当前所选UITextField之后显示的文本字段上。
此策略在ios 7.x上运行正常,但是,它会在ios 6中导致堆栈溢出。
所以,我想知道我是否打电话给' BecomeFirstResponder()
'正在强制TextFieldOnEditDidEnd()
在我刚刚作为第一响应者的文本字段上调用。
是否有人知道BecomeFirstResponder()
的来电是否强制拨打TextFieldOnEditDidEnd()
?此外,此行为是否已从iOS 6.x更改为iOS 7.x?
感谢
答案 0 :(得分:1)
不完全回答你的问题,但另一个解决方法是:
在tag
上设置textFields
。从表单1,2,3开始...然后,在代码中,实现textFieldShouldReturn:
,如下所示:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
UIView * nextView = [textField.superview viewWithTag:textField.tag+1];
if ([nextView respondsToSelector:@selector(becomeFirstResponder)])
[nextView becomeFirstResponder];
return NO;
}
答案 1 :(得分:1)
适用于iOS 6和iOS 7的解决方案是使用延迟性能。在TextFieldOnEditingDidEnd
,请勿直接致电becomeFirstResponder
;相反,在一个dispatch_after
函数调用中调用它只需很短的延迟。这将允许第一个方法在第二个方法开始之前结束,从而打破无限循环。