Ios 防止iPad上UIActionSheet被意外删除

Ios 防止iPad上UIActionSheet被意外删除,ios,ipad,ios5,uiactionsheet,Ios,Ipad,Ios5,Uiactionsheet,我正在使用UIActionSheet在iPad应用程序中向用户展示两个选项。用户选择一个或其他选项,UIActionSheetDelegate处理其余选项。但是,如果用户无意中点击了iPad屏幕上的其他任何地方,UIActionSheet将自动取消,并且两个选项都不会被选中。如何防止UIPopoverDelegate自动关闭,从而强制用户从两个选项中选择一个?如果操作表位于UIPopover内,解决方法是使用UIPopoverDelegate在操作表存在时停止关闭popover。另一个解决方案是

我正在使用UIActionSheet在iPad应用程序中向用户展示两个选项。用户选择一个或其他选项,UIActionSheetDelegate处理其余选项。但是,如果用户无意中点击了iPad屏幕上的其他任何地方,UIActionSheet将自动取消,并且两个选项都不会被选中。如何防止UIPopoverDelegate自动关闭,从而强制用户从两个选项中选择一个?

如果操作表位于UIPopover内,解决方法是使用UIPopoverDelegate在操作表存在时停止关闭popover。另一个解决方案是使用UIAlertView,它将不允许任何事情发生,除非与警报交互。可能不是你的解决方案。我不知道如果你触摸屏幕的另一个部分,UIActionSheet会自动消失

当操作表可见时,为创建BOOL变量

BOOL actionSheetVisible; //in header file

//in @implementation file
-(void)displayAlert {
    actionSheetVisible = YES;
    //code to display UIAction sheet...
}

#pragma mark PopoverControllerDelegate method
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popover {
    if (actionSheetVisible) {
        return NO;
    }
    return YES;
}

#pragma mark UIAlerViewDelegate
...actionSheet:(UIActionSheet *)sheet selectedObjectAtIndex:(NSUInteger)index { ... //not sure what this method is at the moment
    actionSheetVisible = NO;
    //handle action sheet
}

如果操作表位于UIPopover内,解决方法是使用UIPopoverDelegate在操作表存在时阻止popover解除。另一个解决方案是使用UIAlertView,它将不允许任何事情发生,除非与警报交互。可能不是你的解决方案。我不知道如果你触摸屏幕的另一个部分,UIActionSheet会自动消失

当操作表可见时,为创建BOOL变量

BOOL actionSheetVisible; //in header file

//in @implementation file
-(void)displayAlert {
    actionSheetVisible = YES;
    //code to display UIAction sheet...
}

#pragma mark PopoverControllerDelegate method
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popover {
    if (actionSheetVisible) {
        return NO;
    }
    return YES;
}

#pragma mark UIAlerViewDelegate
...actionSheet:(UIActionSheet *)sheet selectedObjectAtIndex:(NSUInteger)index { ... //not sure what this method is at the moment
    actionSheetVisible = NO;
    //handle action sheet
}

在应用程序窗口中添加一个不起任何作用的手势控制器怎么样?或者尝试将其添加到图纸下方的视图中?确保完成后将其删除;)

在应用程序窗口中添加一个不起任何作用的手势控制器怎么样?或者尝试将其添加到图纸下方的视图中?确保完成后将其删除;)

我将抛出另一个想法-在显示操作表之前,在窗口中添加一个覆盖整个屏幕的透明视图,然后设置视图。userInteractionEnabled=NO,然后在取消操作表时删除该视图。[我没有在iPad上测试,但在手机上使用了这种技术]

我会抛出另一个想法-在你展示动作表之前,在窗口中添加一个覆盖整个屏幕的透明视图,然后设置视图。userInteractionEnabled=NO,然后在取消操作表时删除该视图。[我没有在iPad上测试这一点,但在手机上使用了这一技术]

行动表是否在UIPoover内?行动表是否在UIPoover内?是的,它在UIPoover内,因为在iPad上使用时通常会自动出现(即我自己没有将它放在UIPoover内)。因此,如果我继续并使我的类符合UIPopoverDelegate,那么如何防止当屏幕被点击到它的外部时popover意外关闭?请参阅我的编辑,您只需确保将popoverController委托设置为self/您正在管理UIActionSheet的类谢谢。我试了一下。不幸的是,PopOvercontrollersouldDismissPopover没有被调用。操作表的委托是self,但我不知道在哪里声明它所包含的popover的委托。通常,如果您正在使用popover,您会特别标识它的代理。在这种情况下,我不是自己制作popover,它是与动作表一起免费提供的。我该如何设置它的委托?您使用的是来自GitHub的自定义类还是其他什么?这是一个关于iPad的问题,对吗?是的,iPad。没有自定义类或任何花哨的东西。我只是以通常的方式分配和初始化UIActionSheet,并使用showFromRect呈现它。iPad操作系统会自动为动作表创建一个小的popover。是的,它在UIPover中,在iPad上使用时通常会自动出现(即我自己没有将它放在UIPover中)。因此,如果我继续并使我的类符合UIPopoverDelegate,那么如何防止当屏幕被点击到它的外部时popover意外关闭?请参阅我的编辑,您只需确保将popoverController委托设置为self/您正在管理UIActionSheet的类谢谢。我试了一下。不幸的是,PopOvercontrollersouldDismissPopover没有被调用。操作表的委托是self,但我不知道在哪里声明它所包含的popover的委托。通常,如果您正在使用popover,您会特别标识它的代理。在这种情况下,我不是自己制作popover,它是与动作表一起免费提供的。我该如何设置它的委托?您使用的是来自GitHub的自定义类还是其他什么?这是一个关于iPad的问题,对吗?是的,iPad。没有自定义类或任何花哨的东西。我只是以通常的方式分配和初始化UIActionSheet,并使用showFromRect呈现它。iPad操作系统会自动为操作表创建一个小弹出框。不幸的是,操作表仍然使用此方法被删除。不幸的是,操作表仍然使用此方法被删除。