我对iPad上的UIActionSheet有疑问。
当我从presentFromBarButtonItem:animated:
出示一个活动表并在此之后出现另一个活动表时(通过点击同一个UIToolbar上的另一个UIBarButtonItem),原始的UIActionSheet保持打开状态。
看起来不太好。
我尝试迭代self.view.subviews
并将视图转换为UIActionSheet并调用其相应的dismissWithClickedButtonIndex:animated:
方法,但它不起作用。
例如:
- (void)pressBarButtonItem {
for (UIView *view in self.view.subviews) {
[(UIActionSheet *)view dismissWithClickedButtonIndex:-1 animated:YES];
}
}
任何帮助表示感谢。
答案 0 :(得分:4)
我认为您的意思是showFromBarButtonItem:animated:
而不是presentFromBarButtonItem:animated:
?
当您点击其他工具栏项时,操作表不会自动在iPad上消失,因为工具栏已添加到操作表的直通视图列表中。
保留对属性中的操作表的引用。调用showFromBarButtonItem后,使用self.itemFooActionSheet = actionSheet;
将其保存在属性中。
在显示另一个项目的另一个操作表之前,请在itemFooActionSheet上调用dismissWithClickedButtonIndex。在解除它之后,您可能还想释放itemFooActionSheet并将其设置为nil,以便它不会在内存中徘徊。
此外,代码可能会在已经显示的情况下再次显示项目Foo的操作表。在显示项目Foo的操作表的方法中,首先检查self.itemFooActionSheet是否为nil,如果是,则只显示它而不重新创建它,或者解除+销毁当前的操作表并构建一个新的(旧的可能)包含过时的信息。)
答案 1 :(得分:0)
在UIBarButtonItems上,如果您不希望人们点击它,您始终可以将启用的属性设置为NO,例如:
self.navigationItem.rightBarButtonItem.enabled = NO;
...然后当用户按下按钮(或在actionSheet之外的某个位置)时再次将其设置为YES。