我有两个Class One是 ViewController ,第二个是 UITableViewCell 在tableview Cell我创建了一个Tapable链接标签。 Label Delegates方法调用我的协议方法,但它不起作用 这是我的代码 1)的的ViewController
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)
}
}
}
如果我在协议不工作时出错,那么我必须使用通知中心 请给我一些解决方案。
答案 0 :(得分:1)
我认为你正在向后实施代表。 UIViewController应该声明自己是单元格的委托,以便它响应来自单元格的调用。所以相反,它应该是这样的:
//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
}
}