Ios 为什么我能';是否从嵌入式UITableViewController调用父UIViewController中存储的方法?

Ios 为什么我能';是否从嵌入式UITableViewController调用父UIViewController中存储的方法?,ios,swift,uitableview,uiviewcontroller,Ios,Swift,Uitableview,Uiviewcontroller,我有一个父ui视图控制器,它有一个方法负责将数据打印到控制台: func printSomeData() { print("printing some data") } 它还有一个带有嵌入式UITableViewController的容器。表本身实现了“拉入刷新”功能,当用户拉入表时,它会打印字符串: func refresh(refreshControl: UIRefreshControl) { print("Refreshing!!") refreshControl

我有一个父ui视图控制器,它有一个方法负责将数据打印到控制台:

func printSomeData() {
    print("printing some data")
}
它还有一个带有嵌入式
UITableViewController
的容器。表本身实现了“拉入刷新”功能,当用户拉入表时,它会打印字符串:

func refresh(refreshControl: UIRefreshControl) {
    print("Refreshing!!")
    refreshControl.endRefreshing()
}
现在我想从
refresh
方法调用
printsomeData

这就是我所尝试的:

父UIViewController:

class MainMenu: UIViewController, printing{

    func printSomeData() {
        print("some date")
    }

}
protocol printing{
    func printSomeData()
}

class MainMenuTableViewController: UITableViewController {

    var delegate: printing?

    func refresh(refreshControl: UIRefreshControl) {
        print("Refreshing!!")

    if let _ = delegate{
        delegate?.printSomeData()
    }


    refreshControl.endRefreshing()
}
嵌入式UITableViewController:

class MainMenu: UIViewController, printing{

    func printSomeData() {
        print("some date")
    }

}
protocol printing{
    func printSomeData()
}

class MainMenuTableViewController: UITableViewController {

    var delegate: printing?

    func refresh(refreshControl: UIRefreshControl) {
        print("Refreshing!!")

    if let _ = delegate{
        delegate?.printSomeData()
    }


    refreshControl.endRefreshing()
}

但现在当我拉桌子时,我只看到
令人耳目一新,我无法看到打印一些数据。我做错了什么?

您在哪里分配代表?

并将可选方法调用写为一行

delegate?.printSomeData()
或者像这样:

if self.delegate != nil {
    self.delegate!.printSomeData()
}
内部
main菜单

override func viewDidLoad() {
    super.viewDidLoad()

    // tableViewController is placeholder for `MainMenuTableViewController` reference
    tableViewController.delegate = self
}
如果我正确理解了您的意思,并且主菜单中有一个带有MainMenuTableViewController的ContainerView,那么这应该可以解决您的问题:

class MainMenu: UIViewController, Printer {

    func printSomeData() {
        print("some date")
    }
}

protocol Printer {

    func printSomeData()
}

class MainMenuTableViewController: UITableViewController {

    var printer: Printer? {

        guard let printer = self.parentViewController as? Printer else {

            return nil
        }
        return printer
    }

    func refresh(refreshControl: UIRefreshControl) {
        print("Refreshing!!")

        printer?.printSomeData()

        refreshControl.endRefreshing()
    }
}

您在哪里分配代表?

并将可选方法调用写为一行

delegate?.printSomeData()
或者像这样:

if self.delegate != nil {
    self.delegate!.printSomeData()
}
内部
main菜单

override func viewDidLoad() {
    super.viewDidLoad()

    // tableViewController is placeholder for `MainMenuTableViewController` reference
    tableViewController.delegate = self
}
如果我正确理解了您的意思,并且主菜单中有一个带有MainMenuTableViewController的ContainerView,那么这应该可以解决您的问题:

class MainMenu: UIViewController, Printer {

    func printSomeData() {
        print("some date")
    }
}

protocol Printer {

    func printSomeData()
}

class MainMenuTableViewController: UITableViewController {

    var printer: Printer? {

        guard let printer = self.parentViewController as? Printer else {

            return nil
        }
        return printer
    }

    func refresh(refreshControl: UIRefreshControl) {
        print("Refreshing!!")

        printer?.printSomeData()

        refreshControl.endRefreshing()
    }
}

谢谢,所以我将{code>if let{delegate?.printSomeData()}
更改为
delegate?.printSomeData()
,但是您能告诉我如何(以及在哪里)分配该委托吗?谢谢,但是现在,
tableViewController.delegate=self
给我带来了一个错误:使用未解析标识符tableViewController。。。如何修复此问题?请将
tableViewController
重命名为您的tableView引用。您可以发送更详细的代码版本吗?我的问题是我这里没有任何tableView参考。我刚刚添加了
var tableViewController:mainmoneutableviewcontroller
,但是我得到的错误是
class main菜单没有初始值设定项
,我不确定我遗漏了什么…我发布了最新版本的代码,请检查对我原始问题的编辑谢谢,所以我更改了
,如果让uuuz=delegate{delegate?.printSomeData()}
delegate?.printSomeData()
,但是你能告诉我怎么做(在哪里)吗我可以分配代理吗?谢谢,但是现在
tableViewController.delegate=self
给我带来的错误是:
使用未解析标识符tableViewController
…我如何解决这个问题?将
tableViewController
重命名为您的tableView引用。您可以发送更详细的代码版本吗?我的问题是我在这里没有任何tableView参考。我只是添加了
var tableViewController:MainMenuTableViewController
,但是我得到了一个错误,
class Main菜单没有初始值设定项,我不确定我遗漏了什么…我发布了我的代码的最新版本,请检查我原始问题的编辑