当我点击导航栏时,来自栏按钮的iOS操作表不会关闭



我有一个从UIBarButtonItem创建的操作表。

显示导航控制器中的选项卡栏控制器

中的视图控制器时以编程方式添加的栏按钮项

- navigation controller
     -tab bar controller
          - view controller (bar button item created in viewdidload and shown in viewwillappear)

操作表正确加载和显示,问题与它的关闭方式有关。如果我点击视图中的任意位置,它会正确关闭,但当我点击导航栏时则不会,这意味着我可以多次点击 UIBarButtonItem 并创建和覆盖操作表。

我知道我可以做一些逻辑来查看操作表是否正在显示而不是重新创建它,我还可以向 viewwill消失添加一些逻辑以手动删除操作表,但想知道为什么它不能开箱即用

我遇到了同样的问题,从一个UIBarButtonItem显示UIActionSheet,在UINavigationController中点击后退按钮时工作表没有被关闭。

我实现了 @updog 描述的解决方案

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if ([actionSheet isVisible]) {
        [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
    }
}

执行dismissWithClickedButtonIndex时不会调用委托,因此索引无关紧要。

我最终向 viewWillDisappear 函数添加了一些逻辑,以隐藏显示的操作表。

我还必须向栏按钮单击操作添加一些其他代码,以便在显示操作表后点击,则不会覆盖另一个操作表。