我正在开发一款游戏,您可以“聘请”开发人员为您工作。基本上我有1个表视图,其中包含您可以雇佣的所有可能的员工,以及另一个表格视图,其中包含您雇佣的员工。
问题是我有第三个表视图,您可以“学习”不同的编码语言,这反过来又会改变每个开发人员可以赚取的金额。
我想要完成的是当玩家按下按钮学习新的编码语言,更新已学习的最新编码语言的变量,从而影响开发人员赚取的金额
我已经完成了所有工作,但是为了更新我拥有的所有标签,当在另一个表视图中按下“学习”按钮时,我需要在Employees表视图中重新加载数据。有什么建议??
答案 0 :(得分:6)
使用delegation。
假设您有两个类EmployeeTable
和LearnTable
。通过协议使Employee表成为Learn表的委托。
在LearnTable
类中,在顶部添加委托协议:
protocol LearnTableDelegate {
func didUpdateTable()
}
EmployeeTable
类必须符合协议并实现它指定的功能。通过扩展课程来遵守协议是一种很好的做法:
extension EmployeeTable: LearnTableDelegate {
func didUpdateTable() {
// do whatever is necessary to update the table
}
}
LearnTable
类需要一个位置来存储对其委托的引用,这是可选的,因为可能没有设置引用:
class LearnTable {
var delegate: LearnTableDelegate?
}
(这里我假设您是从EmployeeTable执行此操作。)在创建LearnTable
的实例之后,在您进入之前,将对EmployeeTable的引用添加为委托。
let learnTable = LearnTable()
learnTable.delegate = self
答案 1 :(得分:3)
您有任何代码可以向我们展示吗?
尝试使用NSNotificationCenter向其他视图控制器发送通知。例如,
在您正在调用重新加载的课程中添加此
NSNotificationCenter.defaultCenter().postNotificationName("reloadTableView" object: self)
在要刷新的表视图的类中,在视图中添加此功能
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "refresh",
name: "reloadTableView",
object: nil)
然后在同一个类中有一个名为" refresh",
的函数func refresh() {
self.tableView.reloadData()
}
答案 2 :(得分:1)
我建议您继续使用学习按钮触发SELECT age, standing
FROM
(SELECT DISTINCT standing, avg(age) as age
FROM student
where standing <> 'JR'
group by standing) as s
,然后使用IBAction
重新加载其他UITableView
。如果你需要在不同的ViewControllers中触发它,我会继续使用tableView.reloadData()
。