上一节使用TouchGFX的handleTickEvent机制做了的计数器,但是有一个缺陷,在切换屏幕后再切换回来计数器归零了,如果我想这个计数器在任意时刻都在计数,哪怕切换的屏幕还是在计数。首先需要知道为什么计数器会归零,原因是TouchGFX使用的是MVP框架,在MVP框架中所有数据仅能保存在称为 Model 的类对象中,Presenter是视图(View)与Model之间的纽带,View只能通过Presenter来读取数据。这个框架可以在VC工程中可以看出。 MVP框架所有需要保存的数据必须再Model 的类对象,我们之前说明的数据都是再View类里面,所以在切换屏幕后所有的数据全部丢失了。 前面说了数据都是再View类切换屏幕后丢掉了类里面的变量,那我设置成全局变量就可以了。 这样哪怕我切换了,数据还是在那里,但是怎么传参呢,定义在.hpp文件里面使用external关键字,都是这样就违背了MVP框架,我们不建议这样做,而且乱调用.hpp文件容易导致冲突,那我还是在Model 的类对象定义变量。找到Model.hpp文件,添加2个公有成员变量,再写读取和写入函数。 再Model.cpp里面赋初始值。 View不能直接读写Model中的数据,必须得通过Presenter来操作,所以先要在Presenter中实现对数据的读写,在Screen2Presenter.hpp正添加读写函数。同样在Screen1Presenter.hpp也添加一样的函数。 在屏幕1添加一个文本框,同样添加通配符,建议字体都选择一样的。 在Screen2View和Screen1View中添加滴答定时函数声明定义。 启动模拟器,切换屏幕反应有点慢,在第一次进入handleTickEvent时候就应该更新显示(这里不做演示了)。 |