模态视图问题

时间:2011-06-14 09:14:19

标签: iphone objective-c cocoa-touch uitextfield uitextfielddelegate

我的一些观点存在问题,这是我设置的简要概述:

Tab Bar Controller
|
--View Controller 1
|
--View Controller 2
|
--View Controller 2

在某个动作上,View Controller 1将显示模态对话框。在此对话框中,如果用户执行另一个操作,则会显示另一个模态对话框,使用第一个模态对话框来显示视图。

在第二个ModalDialog上我有一个UITextField,但是当我尝试输入文本字段时,没有任何反应。即使显示键盘并调用textFieldDidBeginEditing方法。我已经设置了UITextFieldDelegate和nessessary响应者,但无济于事。

有谁知道会导致这个问题的原因?

非常感谢

4 个答案:

答案 0 :(得分:3)

我发现在很多情况下,视图和弹出窗口都在改变,文本字段没有正确地聚焦于您所描述的症状。在这些情况下,我最终推迟becomeFirstResponder调用,直到动画完成或视图已加载 - 例如在视图控制器viewDidAppear方法中。

或者,只需将调用推迟到becomeFirstResponder,并适当估计视图更改/动画等所需的时间,即:

[textField performSelector:@selector(becomeFirstResponder)
                withObject:nil
                afterDelay:0.3];

答案 1 :(得分:1)

如果可能的话,我会尝试从视图控制器“链接”模态对话框。

  • VC打开第一个模态对话框
  • 您的第一个模态对话框通知VC(可能使用委托)。
  • (可能需要)关闭第一个模态对话框
  • VC打开第二个模态对话框
  • 快乐!

答案 2 :(得分:0)

我不确定你对“模态对话”的意思 - 我假设你的意思是模态呈现的视图控制器,具有UIModalPresentationFormSheet模态演示样式或UIPopoverController。

这是我最好的猜测:我非常确定您的“模态对话”会捕获所有用户互动(默认情况下)。因此,在推送第一个时,它会捕获所有输入焦点。当推动第二个时,它的捕获与之前的捕获冲突,因此键盘将无法工作。

无论如何,两种类型的“模态对话”并不意味着堆叠。即使它可能在技术上有效,但我不喜欢它形成了一种交互设计的视角。而不是试图修复错误或解决它,尝试重新思考你的模态对话。您可以将所有内容整合到一个中。例如,在该视图中使用导航控制器,或者通过替换视图或翻转其内容......等。

希望这有帮助,Max

答案 3 :(得分:0)

如果我是你,我会考虑修改导航层次结构。模态对话框被认为是不够的,但在模态对话框中加入模态对话框是用户界面自杀。它会给用户造成混淆,非常不传统。有什么方法可以使用第一个模态弹出窗口并简单地交换内容吗?

附注:您提到将视图设置为UITextViewDelegate。您是否将视图作为文本框的委托?您是否从NO返回FALSE- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string