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

时间:2016-02-26 05:50:50

标签: swift protocols

我有两个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)
        }
    }

} 

如果我在协议不工作时出错,那么我必须使用通知中心 请给我一些解决方案。

1 个答案:

答案 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
    }

}