gpt4 book ai didi

swift - 在 Swift 中从 TableViewController(和其他)外部调用函数/传递数据

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

在我的应用程序中,我将一个屏幕分为两个 ViewController - LadderViewController 和 GameHistoryTableViewController,它们位于一个容器中。我希望用户能够通过点击 LadderView 中的某些内容来过滤表中的数据。我尝试使用委托(delegate)来解决这个问题:

阶梯 View Controller :

delegate = GameHistoryTableViewController()
func imageTapped(imageIndex: Int) {
delegate?.selectedHeroNumber(imageIndex)
}

GameHistoryTableViewController:(符合委托(delegate)协议(protocol)并从中实现一个功能)

func selectedHeroNumber(heroNumber: Int) {
let filteredGames = filterGamesFromHeroNumber(heroNumber)
tableDataSource = filteredGames
self.tableView.reloadData()
}

但这不起作用,因为我在 LadderViewConroller 中声明的委托(delegate)是 GameHistoryTableViewController 的另一个实例,而不是(向用户)显示的委托(delegate)。我不知道如何访问 GameHistoryTableViewController 的“可见”实例(表)...那么,这里应该如何使用委托(delegate)?或者我应该使用另一种方法(如果是的话,是哪种方法)?我基本上需要根据用户点击的内容更改表的数据源,可以说是“从外部”(dataSource 是我的 GameHistoryTableViewController 类中的一个属性)。

最佳答案

这是一个像你想做的委托(delegate)的例子。在这种情况下,这是比单例更好的解决方案;)

声明一个新的协议(protocol)调用 HeroInfo:

protocol HeroInfo: class {
func selectedHeroNumber(heroNumber: Int);
}

阶梯 View Controller :

//create the delegation
weak var delegate:HeroInfo?

func imageTapped(imageIndex: Int) {
//call the delegate method
delegate?.selectedHeroNumber(imageIndex)
}

GameHistoryTableViewController:

 // Here get the protocol HeroInfo inheritance
class userTableViewController: UITableViewController, HeroInfo {

override func viewDidLoad() {
super.viewDidLoad()
//Here get your Ladder view in a splitView
if let split = self.splitViewController {
let controllers = split.viewControllers
self.ladderViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? ladderViewController
//register it to delegate
self.ladderViewController?.delegate = self
}
}
...
// Here is your method of your protocol that you must conform to
func selectedHeroNumber(heroNumber: Int) {
let filteredGames = filterGamesFromHeroNumber(heroNumber)
tableDataSource = filteredGames
self.tableView.reloadData()
}
...

}

关于swift - 在 Swift 中从 TableViewController(和其他)外部调用函数/传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745283/

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