【问题标题】:Dismiss uialertview programmatically in iOS7在 iOS7 中以编程方式关闭 uialertview
【发布时间】:2014-09-01 15:06:19
【问题描述】:

我在自定义类中实现了UIAlertview 类别。我正在从我的uitableviewcontroller 调用该方法以显示警报。但在 iPhone 4 设备上的 iOS7 中,快速单击 uitableviewcells 时,警报视图会多次出现。

如果警报视图已使用以下代码打开,我会尝试关闭它。

for (UIWindow* w in [UIApplication sharedApplication].windows)
    for (NSObject* o in w.subviews)
        if ([o isKindOfClass:[UIAlertView class]])
            [(UIAlertView*)o dismissWithClickedButtonIndex:[(UIAlertView*)o cancelButtonIndex] animated:YES];

但此代码在 iOS 7 中不起作用。我不确定我遵循的方式是否正确。

【问题讨论】:

  • 您可以给视图一个标签或将其分配给一个属性,因为无论如何您似乎只想保留它的一个实例。
  • 我曾经有一个包含显示警报的数组,并遍历数组以在 viewWillDisappear 中关闭它们
  • 你几乎从不想遍历子视图并用这种方式弄乱东西,你会遇到各种各样的坏问题。
  • 虽然解决方案可以简单地保留 alertViews 的引用并在需要时将它们全部关闭,但我可能建议您重新考虑一下为什么要显示所有这些警报并在第一名..在我看来是一个非常糟糕的用户体验。
  • @Mike 在快速点击 uitableviewcells 时,会返回多个警报。所以我正在检查警报是否打开?

标签: objective-c iphone ios7 uialertview


【解决方案1】:

遍历[UIApplication sharedApplication].windows 是个坏主意。更好的概念是保留活跃的UIAlertView 的引用并在需要时将其关闭。

注意: 利用UIAlertView属性isVisible,表示是否显示AlertView。

示例:

if (YES == alertViewInstance.isVisible)
{
   //dismiss your alert view
}

【讨论】:

  • 感谢您的回复.. 我也尝试了 isVisible 属性,但没有用。它在 iOS7 中不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
相关资源
最近更新 更多