如何编写协议将数据向后传递给UITableViewController?

时间:2016-03-07 13:01:48

标签: ios swift cocoa-touch

我想知道如何编写一个协议来向后传递数据到UITableViewController?如果我写一个正常的协议,就像为UIViewController写的那样,我得到一个错误“Type”TableViewController“不符合类型协议”PresentedViewControllerDelegate“。”

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

只有协议是不够的,您还需要delegate

  • 声明你的协议:

    protocol PresentedViewControllerDelegate {
       func method1(data:[String:AnyObject])
       func method2(controller:PresentedViewController)
    }
    

    在第一种方法中,您传递自定义对象(Dictionary),
    在第二种方法中,目标控制器本身。

  • 目标视图控制器 PresentedViewController(发件人)中创建委托属性:

    weak var delegate : PresentedViewControllerDelegate?
    

    并添加代码以调用方法

    delegate?.method1(someDictionary)
    
    delegate?.method2(self)
    

    可选链接非常方便,如果委托是nil,则不会调用方法。

  • 源视图控制器(接收方)中将PresentedViewControllerDelegate添加到声明行,实现协议所需的方法并在prepareForSegue中添加一行设置代表。

    let destinationController = segue.destinationController as! PresentedViewController
    destinationController.delegate = self
    

答案 1 :(得分:0)

创建您的协议,并让您的自定义UITableViewController子类确认您创建的协议。在你的控制器中实现所需的方法和属性,你就可以了。

例如:

protocol YourProtocol
{
    func method1(par1: String, par2: Int)
}

class YourTableViewController: UITableViewController, YourProtocol
{
    //MARK:- YourProtocol Methods
    func method1(par1: String, par2: Int)
    {
        //Receive your data through this method
        //And Do your thing here
    }
}

答案 2 :(得分:0)

您的TableViewController尚未实现在PresentedViewControllerDelegate协议中声明的函数。实施这些功能,你就没事了。

protocol PresentedViewControllerDelegate {
  func somefunction(parameter: String)
  func anotherfunction()
}

class Table: UITableViewController, PresentedViewControllerDelegate {
  func somefunction(parameter: String) {

  }
  func anotherfunction() {

  }
}