Ios 为什么我能';是否从嵌入式UITableViewController调用父UIViewController中存储的方法?
我有一个父ui视图控制器,它有一个方法负责将数据打印到控制台: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
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菜单没有初始值设定项,我不确定我遗漏了什么…我发布了我的代码的最新版本,请检查我原始问题的编辑