gpt4 book ai didi

ios - 从跨多个 View Controller 的 TableView 单元显示警报 Controller

转载 作者:行者123 更新时间:2023-11-28 05:36:43 25 4
gpt4 key购买 nike

我有一个带有按钮的表格 View 单元格。单击该按钮时,我想显示一个警报 Controller 。我现在实现的是委托(delegate)模式,如下所示:

https://stackoverflow.com/a/49199783/6724161

问题是我在多个 View Controller 中的整个应用程序中使用此 TableView 单元格,因此我不想将相同的警报 Controller 代码复制并粘贴到每个 View Controller 。

当单击表格 View 单元格中的按钮时,如何在任何 View Controller 上显示警报 Controller ?

最佳答案

正如评论中所指出的,您可以使用通知,但我会做其他事情。

1. 在您的自定义单元类中,我将添加一个类型为 UIViewController 的名为 parentVC 的属性:

class YourTableViewCell: UITableViewCell {

var parentVC: UIViewController!

...

}

2. 然后,当您将单元格出列时,我会将单元格的 parentVC 设置为 self,如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "YourCellIdentifier") as! YourTableViewCell
//`self` is the view controller that the cell's table view is held in
cell.parentVC = self
return cell
}

3. 最后,每当您的自定义单元格的按钮被点击时,只需显示来自 parentVC 的警报 Controller :

class YourTableViewCell: UITableViewCell {

var parentVC: UIViewController!

@IBAction func customButtonPressed(_ sender: Any) {
let alertController = UIAlertController(title: "Your alert title.", message: "Your alert message.", preferredStyle: .alert)
parentVC.present(alertController, animated: true, completion: nil)
}

...

}

另一种变体(由 rmaddy 建议)

您可以简单地更改 UITableViewCell 中的按钮以递归检查下一个响应者,直到它是 UIViewController 类型。

首先将以下扩展添加到UIView。这将找到 UIView 的父 View Controller :

extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}

您可以简单地更改 UITableViewCell 中的按钮以递归检查下一个响应者,直到它是 UIViewController 类型。找到此 UIViewController 后,您可以让它呈现 UIAlertController 或任何其他 View Controller :

来源:Given a view, how do I get its viewController?

一旦找到这个 UIViewController,就可以让它显示 UIAlertController 或任何其他 View Controller :

class YourTableViewCell: UITableViewCell {

...

@IBAction func customButtonPressed(_ sender: Any) {
let alertController = UIAlertController(title: "Your alert title.", message: "Your alert message.", preferredStyle: .alert)

guard let parentVC = self.parentViewController else { return }
parentVC.present(alertController, animated: true, completion: nil)
}

...

}

关于ios - 从跨多个 View Controller 的 TableView 单元显示警报 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com