如何使UIAlertView暂停线程并等待用户响应,iOS开发

时间:2013-05-23 01:34:26

标签: ios uialertview

请仔细阅读我的所有问题,看看它是否与this question

重复

有时我相信iOS是最好的操作系统,而xCode也是最优雅的IDE,但有时我认为它们既是世界上最愚蠢的东西,也可能是整个宇宙!

我需要的东西很简单,像这样的代码逻辑

//code BEFORE asking user's decision
//with a lot of variables, this is important

//call UIAlertView to ask user Yes/No question, now the thread should be paused and waiting for user's tap on button

//code AFTER get user tap a button, selected YES/NO
//MANY variables before asking should be continuely used here
answerIsYES = //response from UIAlertView
if (answerIsYES)
{
     //code response to YES
}else{
     //code response to NO
}

如果你在UIAlertView show之前和之后注意到“MANY variables”,你不会建议我使用UIAlertViewDelegate。如果是这样,我必须在类级别制作所有变量,如果我必须在FOR循环中询问用户的决定,该怎么办?那不能跳转到SelectedButtonAtIndex方法然后回来!我对吗?我希望集成我的代码,但UIAlertView及其委托似乎保持分裂。

说实话,我想要的只是来自.NET的MessageBox,它可以等待用户的点击。那么在iOS上有什么代码可以解决这个问题吗?在iOS中是否有代码可以简单地“暂停”一个线程,然后由某个事件触发并“恢复”它?

我搜索了很多,找不到满意的答案,答案涉及“NSCondition”,“NSThread”,“循环”,但没有一个真的很好用。但我确实在链接中找到了一个,由@Joseph Gagliardo回复,我不知道这是否是最好的解决方案。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

与UIKit的大多数其他方面一样,

UIAlertView是事件驱动的。您不希望在显示警报时阻止主线程。很多时候其他事情需要继续前进,同时警报在视野中。但是你的问题有一个很好的解决方案。块。

最近添加的UIKit类开始使用块。这使得编写事件驱动代码更容易。它不需要单独的委托方法来处理某些事件的完成。

在“UIAlertView块”上进行Google搜索。您会发现使用块的UIAlertView的多个第三方版本。使用此类警报视图将允许您将所有代码保留在一个方法中。这些解决方案不会暂停主线程或任何东西。它只是使完成块更容易访问您在显示警报视图之前设置的所有变量。