【问题标题】:UIAlertController not appearing at allUIAlertController 根本没有出现
【发布时间】:2015-09-27 04:13:08
【问题描述】:

我正在尝试将UIAlertController 添加到我的应用程序中,但它根本没有出现。我尝试了以下方法:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"Web Service is not available." preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:ok];

[self presentViewController:alertController animated:YES completion:nil];

但这根本没有出现,我做错了什么?

【问题讨论】:

  • 这段代码应该可以正常工作。你能告诉我们这个 sn-p 出现的其余上下文吗?
  • 您发布的代码看起来应该可以工作。您用来显示该警报的方法是什么样的?那个方法被调用了吗?
  • 您是否尝试在主线程之外显示此警报控制器?您甚至是从视图控制器中呈现它吗?你有任何错误吗?

标签: ios objective-c uialertcontroller


【解决方案1】:

在故事板的初始视图控制器中,它必须在viewDidAppear: 中。否则,如果在 XIB 中使用,它还会在 viewWillAppearviewDidLoad 中显示警报。

我在 iOS 8 和 9 的单视图应用程序模板中运行了您的代码,将您的代码放入以下视图生命周期回调中的给定 ViewController,

  • viewDidAppear - 成功
  • viewWillAppear - 没有显示警报;导致控制台中出现以下输出:警告:尝试显示不在窗口层次结构中的视图!
  • viewDidLoad - 没有显示警报;在控制台中导致此输出:不允许在解除分配时尝试加载视图控制器的视图,并且可能导致未定义的行为 ()。

【讨论】:

  • 为什么要在 viewDidLoad 中显示警报控制器?如果您正在加载视图但不一定要呈现它怎么办?
  • 要回答您的第一个问题,您可能希望在视图出现时立即显示警报。不过,我只是提一下,万一麦格纳的代码在viewDidLoad 中。我只是尝试将他的代码放在带有 Storyboard(单视图应用程序模板)的 iOS 9 中的 viewDidLoad 方法中,但出现错误:不允许在解除分配时尝试加载视图控制器的视图,并且可能导致未定义的行为 ()。我会用一些解释来扩展我的答案。
  • viewDidLoad 不会在视图出现后立即调用。那将是 viewWillAppear。是的,在加载时在视图上显示视图控制器是没有意义的。
  • 我的意思是它会立即显示。而且,我认为问题不在于什么是有意义的。它是关于使用 UIAlertViewController 参考中的 Apple 示例来显示警报。
  • 我使用了相同的方式,但它甚至没有显示 viewdidappear() 所以有什么原因,我们需要显示限制用户可以调用任何地方,因为我们调用 uialertview 任何地方,任何类或方法,为什么我们不叫这个。???
【解决方案2】:
- (void)showMessage:(BOOL)animated {

UIAlertController *alertController = [UIAlertController  alertControllerWithTitle:@"Do not leave any Field Empty"  message:nil  preferredStyle:UIAlertControllerStyleAlert];

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    [self dismissViewControllerAnimated:YES completion:nil];
}]];
[self present:alertController animated:YES completion:nil];

}

我在哪里调用这个方法

        [self showMessage:YES];

它工作得很好,可能有人会得到好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多