【问题标题】:while UIAlertController is shown, parent's viewDidDisappear is not called (only on IOS8)在显示 UIAlertController 时,不调用父级的 viewDidDisappear(仅在 IOS8 上)
【发布时间】:2014-12-31 11:57:40
【问题描述】:

遗憾的是,我不得不从 UIActionSheet 迁移到 UIAlertController,因为 IOS8 删除了第一个功能。

在使用它之前,每次我进出主屏幕时,都会调用父视图“viewDidDisappear”,这样我就可以关闭我创建的菜单。

现在它不再被调用了。 代码如下:

UIAlertController *alert = [UIAlertController .... preferredStyle:UIAlertControllerSTyleActionSheet]
UIAlertAction* a = [....]
[alert addAction: a];
alert.popoverPresentationController.barButtonItem = self.myButton // the bar button from my view
[self presentViewController:alert animated:YES completion:nil] // maybe im not showing the view well?

我不知道如何从这里继续......希望得到一些帮助 谢谢。

== 编辑 ==

我看到不推荐使用的 UIActionSheet 和 UIDcoumentInteractionController 也会发生这种情况 - 仅在 IOS8 中,不在 IO7 中

【问题讨论】:

  • 我也有同样的困惑。也许苹果开发者认为它是透明的,所以它并没有真正消失。

标签: objective-c xcode ios8


【解决方案1】:

也许我在这里想得太简单了,但是将您拥有的任何代码放在一个单独的方法中并从 viewDidDisappear 调用该方法并在您用来呈现警报控制器的那段代码之后调用该方法不是最简单的吗?

- (void)viewDidDisappear {
    [self hideMenu];
}

- (void)hideMenu {
    // Do all stuff to hide the menu you previously did in viewDidDisappear
}

并像这样更改呈现代码

// more code here
[self presentViewController:alert animated:YES completion:nil];
[self hideMenu];

【讨论】:

  • 但如果我在显示后立即调用 hideMenu,它不会立即关闭窗口吗?另外,当我移动到主屏幕时不应该调用 viewDidDisappear 吗?
  • 可能我不明白你真正的问题,因为你的问题有点不完整
  • 我可以提供更多信息吗?据我了解,当进入主屏幕并返回时,视图应调用“viewDidDisappear”和“viewDidAppear”。如果显示 UIAlertController(在上面的代码中),我会返回主屏幕,然后返回应用程序 - 不再调用这些函数。顺便说一句,这只是在 IOS8 中
  • 是的,但您仍然知道它何时显示以及何时关闭(通过委托)。是什么阻止您从代码中的这些点调用消失/出现中所做的任何事情?
  • 我怎么知道的?我以为我会通过“viewDidDisappear/Appear”知道它 - 这些是我在 IOS8 中未被调用的挂钩点..
猜你喜欢
  • 1970-01-01
  • 2014-10-27
  • 2015-12-15
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多