在呈现的视图控制器上的 UITableViewCell 中呈现 UIAlertController

Posted

技术标签:

【中文标题】在呈现的视图控制器上的 UITableViewCell 中呈现 UIAlertController【英文标题】:Present UIAlertController in UITableViewCell on Presented View Controller 【发布时间】:2018-01-03 17:05:11 【问题描述】:

我想从UITableViewCell 类中显示UIAlertController

搜索时我发现UIApplication.shared.keyWindow?.rootViewController?.present 这样做会显示它。

如果打开的ViewController 位于NavigationController 下,则此方法有效,因为我的rootViewControllerNavigationController,而cell 正在呈现的视图下。

那么我如何在呈现的UITableViewCell 中呈现UIAlertController

【问题讨论】:

【参考方案1】:

我认为您必须在单元格类中创建一个变量,并且您必须将这些类分配给实现单元格的变量。

然后在单元格中您只需调用警报,如下面的代码:

var fromViewController : UIViewController?

@IBAction func accessoryBtnTapped(_ sender: UIButton)

    let alert = UIAlertController(title: "Alert!", message: "It's Alert From Cell", preferredStyle: .alert)
    let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
    alert.addAction(okAction)

    fromViewController?.present(alert, animated: true, completion: nil)

【讨论】:

【参考方案2】:

您需要实现delegate 模式。

创建一个由您的控制器实现的protocol,并将此控制器的weak 引用分配给您的单元格。

然后使用类似cell.delegate.didPerformAction()

单元格是View,它不应该负责呈现任何内容。

【讨论】:

以上是关于在呈现的视图控制器上的 UITableViewCell 中呈现 UIAlertController的主要内容,如果未能解决你的问题,请参考以下文章

presentViewController 不显示呈现视图控制器上的所有元素

在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器

如何从呈现的视图控制器上的按钮操作推送视图控制器

呈现一个新的视图控制器然后关闭它,调用父视图控制器上的 init()

推送后视图上的按钮将不起作用,然后呈现一个 UIViewController

如何在模态呈现的视图控制器上执行呈现模态序列?