我在视图中显示UIActionSheet
,其中一个操作表按钮显示另一个操作表。当我在iPad上展示第二个操作表时,我在日志中收到此警告消息:
要求UIPopoverBackgroundVisualEffectView为其不透明度设置动画。这将导致效果显示为不透明,直到不透明度返回到1。
这是我的代码:
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Option"] delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Sort", nil];
actionSheet.tag = 1;
[actionSheet showInView:self.view];
在代表中:
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
[self showSortAction];
}
-(void)showSortAction {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Sort By" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"A-Z", @"Z-A", @"Newer to older", @"Older to newer", nil];
actionSheet.tag = 2;
[actionSheet showInView:self.view];
}
答案 0 :(得分:4)
我的猜测是,第二个操作表的显示导致第一个操作表的不透明度发生变化,从而触发您所看到的警告。不是在-showSortAction
内调用-actionSheet:clickedButtonAtIndex:
,而是从-actionSheet:didDismissWithButtonIndex:
内调用它。这使得第一个操作表有足够的时间在第二个操作表开始动画之前从屏幕上消失。(参见UIActionSheetDelegate documentation - 具体来说,是clicked和did-dismiss方法的详细文本。)
虽然我们已经讨论过此主题,但请注意,UIActionSheet documentation表示自iOS 8以来已弃用。除非您针对iOS 7或更早版本进行编程,否则请考虑转换尽快到UIAlertController。
答案 1 :(得分:2)
@Tim在上面是正确的。
您不应再使用已弃用的UIActionSheet。他关于使用actionSheet:didDismissWithButtonIndex:
的解决方案可能以前有效,但按照https://stackoverflow.com/a/25044710/1634905,它已经不再适用了,因为Apple已经转移到UIAlertController
。
您真的应该将代码切换为UIAlertController
而不是旧方法来解决问题。