0

对于特定的服务器通知,我应该显示 UIActionSheet。但是这里的问题是,当该事件发生时,同时如果任何 UIAlertView 已经显示在任何视图控制器上,它会使 UIActionSheet 被禁用(在为警报视图按下确定后,我无法在视图控制器上选择任何内容,视图被禁用,因为UIActionSheet)。任何人都遇到过这种问题,知道如何解决吗?

我尝试在显示操作表之前关闭警报视图,但是我需要关闭哪个警报视图,因为我在许多控制器中有许多警报视图。所有这些都是该控制器的本地。如何解决这个问题呢。

注意: iPod 不会出现同样的问题,因为它不允许在响应 UIActionSheet 之前单击确定。

4

5 回答 5

2

获取一个名为 activeAlertView 的全局警报视图。现在,当您显示警报视图时,请检查该警报视图,然后显示和分配。喜欢

在 .h 中声明一个属性并合成它

@property (nonatomic, retain) UIAlertView *activeAlertView;

然后在尝试显示警报时使用以下代码。

if(self.activeAlertView){
    [self.activeAlertView dismissWithClickedButtonIndex:0 animated:YES];
}
UIAlertView *localAlert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Your message" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil ];
[localAlert show];
self.activeAlertView = localAlert;
[localAlert release];

这样,您的 activeAlertview 将保留当前警报视图的引用,并在显示 actionSheet 之前关闭警报视图。

于 2013-06-24T09:23:49.450 回答
1

对于 Identified,alert-view您必须设置Tagalert-view.

前任:-

alertviewName.tag=1;

然后你可以检查是否有警报视图打开特别view-controller sub-views使用下面的代码,如: -

- (BOOL) doesAlertViewExist {

        for (UIView* view in yuorviewcontroller.view.subviews) {
            BOOL alert = [view isKindOfClass:[UIAlertView class]];

            if (alert)
            {
             return YES;
            }

        }
       return NO;

}

调用此方法后,您将获得 BOOL 值 YES 或 NO 如果是,则使用 UIAlertview 的委托将其关闭:-

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;

并将您的 Actionsheet 出现代码放入didDismissWithButtonIndex方法中。

于 2013-06-24T09:23:10.293 回答
0

在这种情况下,您应该使用

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

方法而不是,

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

所以你的代码将是:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
    UIActionSheet *actionSheet = ...
    [actionSheet showFromTabBar:self.tabBarController.tabBar];
}
}

谢谢

于 2013-06-24T09:22:24.617 回答
0

试试这个: for (UIWindow* w in [UIApplication sharedApplication].windows) { for (NSObject* obj in w.subviews) { if ([obj isKindOfClass:[UIAlertView class]]) { [(UIAlertView*)obj dismissWithClickedButtonIndex:[ (UIAlertView*)obj
cancelButtonIndex] 动画:YES]; } } }

于 2013-06-24T13:07:18.363 回答
0

当消息到来时,首先检查是否有警报视图。

关闭警报视图显示操作表。如果didDismiss...您现在必须显示操作表,则可以检查 BOOL 标志。

于 2013-06-24T09:15:37.503 回答