gpt4 book ai didi

ios - 从 UICollectionViewCell 呈现 AlertView

转载 作者:可可西里 更新时间:2023-11-01 06:20:03 24 4
gpt4 key购买 nike

我的 UICollectionViewCell.swift 中有一个按钮:我希望它能够根据某些参数显示警报。

class CollectionViewCell: UICollectionViewCell {
var collectionView: CollectionView!

@IBAction func buttonPressed(sender: UIButton) {

doThisOrThat()
}


func doThisOrThat() {
if x == .NotDetermined {
y.doSomething()
} else if x == .Denied || x == .Restricted {
showAlert("Error", theMessage: "there's an error here")
return
}
}

func showAlert(title: String, theMessage: String) {
let alert = UIAlertController(title: title, message: theMessage, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.collectionView!.presentViewController(alert, animated: true, completion: nil)
}

self.collectionView!.presentViewController 行我得到了休息:

fatal error :在展开可选值时意外发现 nil

我猜这与 CollectionView 的使用方式有关——我还不完全理解可选值。我知道 UICollectionCell 不能 .presentViewController - 这就是为什么我试图让 UICOllectionView 去做。

我如何使它起作用?我想过使用 extension 但不知道如何让 UICOllectionViewCell 采用 .presentViewController

有什么想法吗?

最佳答案

Collection View 单元不应依赖于其父 View 或 View Controller 的知识,以维护作为适当应用架构一部分的功能职责分离。

因此,要让单元格采用显示警报的行为,可以使用委托(delegate)模式。这是通过向具有 Collection View 的 View Controller 添加协议(protocol)来完成的。

@protocol CollectionViewCellDelegate: class {    
func showAlert()
}

并让 View Controller 符合该协议(protocol):

class MyViewController: UIViewController, CollectionViewCellDelegate {

同时向单元格添加委托(delegate)属性:

    weak var delegate: CollectionViewCellDelegate?

showAlert() 函数移到您的 Collection View Controller 中。

创建单元格时,将单元格的委托(delegate)分配给 Collection View Controller 。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

// Other cell code here.

cell.delegate = self

当需要显示警报时,调用手机

delegate.showAlert()

然后警报将显示在 Collection View Controller 上,因为它已被设置为 Collection View 单元格的委托(delegate)。

关于ios - 从 UICollectionViewCell 呈现 AlertView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796005/

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