我有一个关于 iPad 上的 UIActionSheet 的问题。

当我从 presentFromBarButtonItem:animated: 呈现一个 Action 表并在此之后呈现另一个 Action 表(通过点击同一 UIToolbar 上的另一个 UIBarButtonItem)时,原始 UIActionSheet 保持打开状态。

看起来不是特别好。

我尝试遍历 self.view.subviews 并将 View 转换为 UIActionSheet 并调用其适当的 dismissWithClickedButtonIndex:animated: 方法,但是它不起作用。

例如:

- (void)pressBarButtonItem {
    for (UIView *view in self.view.subviews) {
        [(UIActionSheet *)view dismissWithClickedButtonIndex:-1 animated:YES];
    }
}

任何帮助表示赞赏。

最佳答案

我想你的意思是 showFromBarButtonItem:animated: 而不是 presentFromBarButtonItem:animated:

当您点击另一个工具栏项目时,操作表不会在 iPad 上自动关闭,因为该工具栏已添加到操作表的传递 View 列表中。

在属性中保留对操作表的引用。调用 showFromBarButtonItem 后,使用 self.itemFooActionSheet = actionSheet; 将其保存在属性中。

在显示另一个项目的另一个操作表之前,请在 itemFooActionSheet 上调用 expireWithClickedButtonIndex。关闭它后,您可能还想释放 itemFooActionSheet 并将其设置为 nil,这样它就不会在内存中徘徊。

此外,当 Foo 项的操作表已经显示时,代码可能会尝试再次显示它。在显示项目 Foo 的操作表的方法中,首先检查 self.itemFooActionSheet 是否不为零,如果是,则显示它而不重新创建它或关闭+销毁当前的操作表并构建一个新的(旧的可能包含过时的信息)。

关于objective-c - 一次打开多个 UIActionSheets,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4530239/

10-14 22:23