gpt4 book ai didi

ios - 为什么我不能从嵌入式 UITableViewController 调用存储在父 UIViewController 中的方法?

转载 作者:行者123 更新时间:2023-11-28 12:52:28 24 4
gpt4 key购买 nike

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

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")
}

}

嵌入式 UITableViewController:

protocol printing{
func printSomeData()
}

class MainMenuTableViewController: UITableViewController {

var delegate: printing?

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

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


refreshControl.endRefreshing()
}

但是现在,当我拉动表格时,我只能看到Refreshing!!,我无法看到正在打印一些数据。我做错了什么?

最佳答案

您要将代表分配到哪里?

并将可选的方法调用写成一行

delegate?.printSomeData()

或者像那样:

if self.delegate != nil {
self.delegate!.printSomeData()
}

MainMenu

override func viewDidLoad() {
super.viewDidLoad()

// tableViewController is placeholder for `MainMenuTableViewController` reference
tableViewController.delegate = self
}

如果我对你的理解正确并且 MainMenu 有一个带有 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()
}
}

关于ios - 为什么我不能从嵌入式 UITableViewController 调用存储在父 UIViewController 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36058604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com