我正尝试创建类似于UIAlertView
的我自己的视图。我通过添加一些子视图到我的自定义视图,然后将我的自定义视图作为子视图添加到[[[UIApplication sharedApplication].delegate window]
中,完成了大部分工作。一旦按下警报视图中的按钮,我也实现了我自己的委托从窗口中删除视图。使用Grand Central Dispatch和UINavigationController的用户界面问题
当委托视图控制器加载时,它在后台运行一个方法,一旦完成,我在主队列上运行一个updateUI
方法。在这个updateUI
方法中显示了警报视图。我做到这一点使用GCD:
dispatch_async(dispatch_get_main_queue(), ^{ [self updateUI]; });
是我遇到的问题是,我的代表是嵌入在导航控制器视图控制器,当我按下“返回”键,弹出该委托视图控制器关闭之前后台方法完成后,警报视图将显示在父视图控制器上。在警报视图中按下按钮不会执行任何操作,因为代理现在不在导航控制器堆栈中。
有谁知道为什么这个警报视图仍然显示,我怎么能防止这种情况发生?我认为关闭代理视图控制器会阻止它的updateUI
方法被调用,但它看起来好像是无论如何。
感谢您的回答。在阅读您的回复之后,我尝试了对块中的变量进行弱引用,但我还没有弄清楚如何使这种方法奏效。但检查视图的超级视图效果很好。再次感谢。 – Kevin 2013-05-03 18:47:16