在呈现的视图控制器上的 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
下,则此方法有效,因为我的rootViewController
是NavigationController
,而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()