我有一个父ui视图控制器,它有一个负责将数据打印到控制台的方法:
func printSomeData() {
print("printing some data")
}
它还有一个嵌入了UITableViewController
的容器。表本身具有实现的pull to refresh功能,并在用户拉出表时打印字符串:
func refresh(refreshControl: UIRefreshControl) {
print("Refreshing!!")
refreshControl.endRefreshing()
}
现在我想从printsomeData
方法拨打refresh
。
这是我尝试的:
父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!!
,我无法看到printing some data
。我做错了什么?
答案 0 :(得分:2)
您在哪里分配代表?
将可选方法调用写为单行
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()
}
}