iPhone:停止执行(打开方法)直到模态窗口关闭?

时间:2011-01-12 23:14:49

标签: iphone objective-c modal-dialog

我有一个UIView,我向用户呈现,其中包含UIPickerView以在不同的值之间进行选择。当显示这个视图时,它是异步显示的,打开UIView的方法在从UIPickerView获取任何有意义的数据之前已经结束。

有没有办法在停止执行打开方法的同时以模态方式呈现此类控件,以便我可以在选择结果后对其进行测试?

我尝试在UIView和UIAlertView中展示UIPickerView,两者都是一样的,我的方法在我使用控件之前返回。

我试过了:

[self presentModalViewController:self.Picker animated:YES];

仍然没有快乐。

2 个答案:

答案 0 :(得分:1)

你绝对不希望-presentModalViewController:Animated:。该方法旨在呈现UIViewControllers,您的Picker是常规的'UIView'。至于你的具体问题,快速回答是“不”。

您在这里需要的是一种略有不同的设计理念。您可以根据需要使用两种方法来呈现选择器并从中获取输入,而不是使用一种方法:一种方法可以使用UIView的动画方法来呈现选择器,另一种方法可以根据它进行输入。

具体来说,通过将自己设置为UIImagePicker的委托,您可以呈现它并确保以后在未来的某个未定义时间,选择器将告诉您(通过pickerView:didSelectRow:inComponent:delegate方法)它选择了一个项目。此时,您可以测试所选值并采取相应措施。有关委托方法的详细信息,请查看UIPickerViewDelegate Protocol Reference

答案 1 :(得分:0)

没有

在UI线程中停止执行只会阻止并锁定UI。这不是执行事件驱动代码的正确方法。

您需要将代码分解为2种方法,而不是暂停/阻止并等待结果。第一个调出选择器然后立即返回,第二个在停止/暂停代码后执行你最初​​想要在你的方法中做的事情。当选择器具有您需要的结果时,让选择器调用第二种方法。