gpt4 book ai didi

Swift 创建一个协议(protocol),但它不起作用

转载 作者:行者123 更新时间:2023-11-28 06:48:16 24 4
gpt4 key购买 nike

我有两个类,一个是 ViewController,第二个是 UITableViewCell在 tableview Cell 中,我创建了一个 Tapable 链接标签。标签委托(delegate)方法调用我的协议(protocol)方法,但它不工作这是我的代码1) View Controller

public protocol DataEnteredDelegate: class {
func userDidEnterInformation(info: NSString)
}

class ChatViewController: UIViewController{

override func viewDidLoad()
{

}
func userDidEnterInformation(info: NSString) {
print(info)
}
}

2)UITableViewCell

class UIChatBubbleTableViewCell: UITableViewCell,TapLabelDelegate
{
var delegate_of_link:DataEnteredDelegate? = nil
func tapLabel(tapLabel: TapLabel, didSelectLink link: String) {
print(link)
if (delegate_of_link != nil) {
delegate_of_link!.userDidEnterInformation(link)
}
}

}

如果协议(protocol)不起作用,我在哪里做错了,那么我必须使用通知中心请给我一些解决方案。

最佳答案

我认为您正在反向实现委托(delegate)。 UIViewController 应该声明自己是单元格的委托(delegate),以便它响应来自单元格的调用。因此,它应该看起来像这样:

//TableViewCell
public protocol DataEnteredDelegate: class {
func userDidEnterInformation(info: NSString)
}
class UIChatBubbleTableViewCell: UITableViewCell{

internal var delegate: DataEnteredDelegate?
{

func tapLabel(tapLabel: TapLabel, didSelectLink link: String) {
print(link)
self.delegate?.userDidEnterInformation(link)

}

}

//UIViewController
class ChatViewController: UITableViewController, DataEnteredDelegate{

override internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("identifier", forIndexPath: indexPath) as!UIChatBubbleTableViewCell
cell.delegate = self

return cell
}

func userDidEnterInformation(info: NSString) {
//do thing
}

}

关于Swift 创建一个协议(protocol),但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35644455/

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