UIActionSheet使用Popover导致问题

时间:2015-01-13 00:38:29

标签: ios objective-c ipad uipopovercontroller uialertcontroller

问题

我遇到了UIAlertController的问题。这是一个iPad项目,我有两个课程,比如第一和第二。

我使用模态演示文稿呈现第一名。在第二课我有一个按钮,点击我正在显示UIActionSheet来执行一些操作。它工作得很好,除非用户快速点击按钮,第二课程被解雇。

代码

第一个VC:

- (IBAction)showNext:(id)sender
{
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondVC"];
    [self presentViewController:vc animated:YES completion:nil];
}

第二个VC:

- (IBAction)showActionSheet:(UIButton *)sender
{
    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:nil
                                                                     message:nil
                                                              preferredStyle:UIAlertControllerStyleActionSheet];
    [alertVC addAction:[UIAlertAction actionWithTitle:@"LogOut"
                                                style:UIAlertActionStyleDestructive
                                              handler:^(UIAlertAction *action)
                        {
                        }]];

    [alertVC addAction:[UIAlertAction actionWithTitle:@"Update"
                                                style:UIAlertActionStyleDefault
                                              handler:^(UIAlertAction *action)
                        {
                        }]];

    [alertVC setModalPresentationStyle:UIModalPresentationPopover];

    UIPopoverPresentationController *popPresenter = [alertVC popoverPresentationController];
    popPresenter.sourceView                       = sender;
    popPresenter.sourceRect                       = sender.bounds;
    [self presentViewController:alertVC animated:YES completion:nil];
}

这两个类中没有其他代码。我不知道为什么会发生这种情况,实际上它发生在我的一个客户端项目中,所以我用上面的代码创建了一个测试应用程序,这也导致了这个问题。

屏幕截图

Issue

我尝试过:

  1. 我查了UIAlertController Class Reference
  2. 在Google上搜索过,没有出现
  3. 备选方案:

    1. 如果我将第二课设为我的rootViewController,问题将不会出现(但我不能这样做,我需要来回导航)
    2. 如果我在外面触摸时禁用了弹出式解雇,则可以避免此问题。但我需要这个工作流程。
    3. 有人可以帮帮我吗?我现在完全迷失了,没有得到任何有用的信息。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道是什么问题,但我修好了。我使用popoverPresentationControllerShouldDismissPopover并返回了YES

- (BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController;
{
    return YES;
}

<强>尤里卡:

这是一次意外!我没有其他方法来解决这个问题,所以我认为会做第二种选择。写作的时候,我不小心写了YES而不是NO。但它有效,我不知道它是如何工作的,以及这个问题的原因是什么。