VipExamViewController.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. //
  2. // VipExamViewController.m
  3. // jiaPei
  4. //
  5. // Created by 张嵘 on 2019/8/26.
  6. // Copyright © 2019 JCZ. All rights reserved.
  7. //
  8. #import "VipExamViewController.h"
  9. #import "FMDatabaseAdditions.h"
  10. #import "DZMCoverController.h"
  11. #import "TempViewController.h"
  12. #import "QuestionModel.h"
  13. #import "SingData.h"
  14. #import "VipSubjectViewController.h"
  15. #import "HWPanModal.h"
  16. #import "ToolsBarView.h"
  17. @interface VipExamViewController () <DZMCoverControllerDelegate, TempViewControllerDelegate>
  18. @property (nonatomic, readwrite, weak) DZMCoverController *coverVC;
  19. @property (nonatomic, readwrite, assign) int number;/// 记录数字
  20. @property (nonatomic, readwrite, assign) int firstNum;///再次进来的第一题
  21. @property (nonatomic, readwrite, retain) FMDatabase *db;
  22. @property (nonatomic, readwrite, retain) FMDatabaseQueue *dbQueue;
  23. @property (nonatomic, readwrite, strong) UISegmentedControl *segmentedControl;
  24. @property (nonatomic, readwrite, strong) UILabel *titleLab;
  25. @property (nonatomic, readwrite, strong) UILabel *selLab;///选中条显示
  26. @property (nonatomic, readwrite, strong) VipSubjectViewController *collectionViewController;
  27. @property (nonatomic, readwrite, strong) ToolsBarView *toolsBarView;
  28. @end
  29. @implementation VipExamViewController
  30. #pragma mark - Life Circle
  31. - (void)viewWillAppear:(BOOL)animated {
  32. [super viewWillAppear:animated];
  33. self.tabBarController.tabBar.hidden = YES;
  34. }
  35. - (void)viewDidLoad {
  36. [super viewDidLoad];
  37. [self initUI];
  38. }
  39. - (void)viewWillDisappear:(BOOL)animated {
  40. [super viewWillDisappear:animated];
  41. int popNum = _firstNum<self.questionArr.count-1 ?_firstNum+1:(int)self.questionArr.count-1;
  42. [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:popNum] forKey:@"QUESTIONNUM"];
  43. [[NSUserDefaults standardUserDefaults] synchronize];
  44. }
  45. - (void)dealloc {
  46. [[NSNotificationCenter defaultCenter] removeObserver:self];
  47. NSLog(@"ViewControllerBook 释放了");
  48. }
  49. #pragma mark - Private Functions
  50. - (void)initUI {
  51. /// 导航栏设置
  52. [self configNavigationBar];
  53. [self creatNaviNorColor:subTitleColor SelColor:defGreen];
  54. _selLab.backgroundColor = defGreen;
  55. _db = [SingData getInstance].db;
  56. self.dbQueue = [SingData getInstance].queue;
  57. ///获取数据
  58. if (self.questionArr.count==0) {
  59. self.number = [[[NSUserDefaults standardUserDefaults] objectForKey:@"QUESTIONNUM"]intValue];
  60. if (self.number!=0){
  61. NSLog(@"已自动回到上次答题位置");
  62. }
  63. [self changeCityQuestion];
  64. }else{
  65. [self creatCoverVC];
  66. }
  67. }
  68. - (void)segmentValueChanged:(UISegmentedControl *)seg {
  69. NSUInteger segIndex = [seg selectedSegmentIndex];
  70. if (segIndex == 1) {//背题
  71. _showAnswer =_coverVC.isCanTap=1;
  72. _selLab.frame = CGRectMake(_segmentedControl.frame.size.width / 2 + 120 * HeightScale, _segmentedControl.frame.size.height + 5, 12, 2);
  73. NSLog(@"已为你显示答案");
  74. } else {//答题
  75. _showAnswer = _coverVC.isCanTap = 0;
  76. _selLab.frame = CGRectMake(120 * HeightScale, _segmentedControl.frame.size.height + 5, 12, 2);
  77. NSLog(@"已为你隐藏答案");
  78. }
  79. if (self.questionArr.count > 0) {
  80. [self.coverVC setController:[self creatSubVC] animated:NO isAbove:NO];
  81. }
  82. }
  83. - (void)creatCoverVC {
  84. DZMCoverController *coverVC = [[DZMCoverController alloc] init];
  85. coverVC.delegate = self;
  86. [self.view addSubview:coverVC.view];
  87. [self addChildViewController:coverVC];
  88. self.coverVC = coverVC;
  89. [self.coverVC setController:[self creatSubVC]];
  90. }
  91. - (TempViewController *)creatSubVC {
  92. TempViewController *vc = [[TempViewController alloc] init];
  93. vc.model = self.questionArr[self.number];
  94. vc.showAnswer = _showAnswer;
  95. vc.index = self.number;
  96. vc.delegate = self;
  97. return vc;
  98. }
  99. - (void)creatNaviNorColor:(UIColor *)norColor SelColor:(UIColor *)selColor {
  100. [self.segmentedControl setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
  101. norColor,
  102. NSForegroundColorAttributeName,
  103. [UIFont systemFontOfSize:60 * HeightScale],
  104. NSFontAttributeName,nil] forState:UIControlStateNormal];
  105. [self.segmentedControl setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
  106. selColor,
  107. NSForegroundColorAttributeName,
  108. [UIFont systemFontOfSize:60 * HeightScale],
  109. NSFontAttributeName,nil] forState:UIControlStateSelected];
  110. }
  111. /// 根据车型取题
  112. - (void)changeCityQuestion {
  113. FMResultSet *resultSet;
  114. resultSet =[_db executeQuery:@"select * from dt_question where cert_type in (2,1) and course=1 order by chapter"];
  115. while ( [ resultSet next ] )
  116. {
  117. // 对应字段来取数据
  118. QuesTionItem *Item = [[QuesTionItem alloc] init];
  119. Item.HiddenRightAnswer = YES;
  120. Item.questionID = [resultSet intForColumn:@"question_id"];
  121. Item.type = [resultSet intForColumn:@"type"];
  122. Item.chapter = [resultSet intForColumn:@"chapter"];
  123. Item.isRight = 0;
  124. Item.userAnswer = @"";
  125. Item.is_favorite = [resultSet intForColumn:@"is_favorite"];
  126. Item.question = [NSString stringWithFormat:@"%@",[ resultSet stringForColumn: @"question" ]];
  127. Item.category = [resultSet intForColumn:@"media_type"];
  128. if (Item.category != 0) {
  129. if (Item.category == 1) {
  130. Item.picName = [resultSet stringForColumn:@"img_url"];
  131. }else{
  132. Item.VediaName = [resultSet stringForColumn:@"video_url"];
  133. }
  134. }
  135. if (Item.type != 1) {
  136. NSString *option_a = [resultSet stringForColumn:@"option_a"];
  137. NSString *option_b = [resultSet stringForColumn:@"option_b"];
  138. NSString *option_c = [resultSet stringForColumn:@"option_c"];
  139. NSString *option_d = [resultSet stringForColumn:@"option_d"];
  140. Item.Awasers = @[option_a,option_b,option_c,option_d];
  141. }
  142. Item.difficulty = [resultSet intForColumn:@"difficulty"];
  143. Item.RightAwaser = [resultSet stringForColumn:@"answer"];
  144. Item.Comments = [resultSet stringForColumn:@"comments"];
  145. [self.questionArr addObject:Item];//获取到所有车型科目一四的所有题目
  146. }
  147. [self searchExamRecord]; //顺序练习
  148. if (self.questionArr.count > 0) {
  149. [self creatCoverVC];
  150. [self creatToolsBar];
  151. }
  152. }
  153. - (void)creatToolsBar {
  154. [self.view addSubview:self.toolsBarView];
  155. @weakify(self)
  156. [self.toolsBarView.listBtn setTapActionWithBlock:^(UIGestureRecognizer *gestureRecoginzer) {
  157. @strongify(self)
  158. self.collectionViewController.index = self.number;
  159. [self presentPanModal:self.collectionViewController];
  160. }];
  161. }
  162. /// 查看答题记录
  163. - (void)searchExamRecord {
  164. FMResultSet *RightresultSet = [_db executeQuery:@"select * from dt_practice_record where course = 1 and mode = 1 and cert_type = 1"];
  165. // 逐行读取数据
  166. while ( [ RightresultSet next ] )
  167. {
  168. NSInteger ID = [RightresultSet intForColumn:@"question_id"];
  169. for (QuesTionItem *item in self.questionArr) {
  170. if (item.questionID == ID) {
  171. item.userAnswer = [RightresultSet stringForColumn:@"user_answer"];
  172. if ([item.userAnswer isEqualToString:[NSString stringWithFormat:@"%d",[RightresultSet intForColumn:@"RIGHT"]]]) {
  173. item.isRight=1;//答对
  174. }else{
  175. item.isRight=2;//答错
  176. }
  177. }
  178. }
  179. }
  180. }
  181. /// 保存更新答题记录 ,如果没有打完自动跳转到下一题 ,model:1顺序2随机3专项4答对5打错6未答7收藏8模拟9考试纪录10章节 . */
  182. -(void)saveTheAnswerRecordActionWithQuesTionItem:(QuesTionItem *_Nullable)item isRight:(NSInteger)right{
  183. /*
  184. *自动跳转到下一题
  185. */
  186. _firstNum=self.number;
  187. if (![[[NSUserDefaults standardUserDefaults] objectForKey:@"AutoJump"] isEqual:@1]) {
  188. if (self.number<self.questionArr.count-1&&right==1) {
  189. [self jumpNextQuestion];
  190. }
  191. }
  192. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  193. [self.dbQueue inDatabase:^(FMDatabase *db) {
  194. BOOL issecect = [db executeUpdate:@"INSERT INTO dt_practice_record (course,mode,cert_type,question_id,user_answer,RIGHT,more_types) VALUES (1,1,1,?,?,?)",
  195. [NSNumber numberWithInteger:item.questionID],
  196. item.userAnswer,
  197. item.RightAwaser];
  198. if (issecect) {
  199. NSLog(@"____________插入成功%ld",(long)item.questionID);
  200. }
  201. }];
  202. });
  203. }
  204. -(void)jumpNextQuestion{
  205. self.number += 1;
  206. [self.coverVC setController:[self creatSubVC] animated:YES isAbove:NO];
  207. }
  208. #pragma mark - DZMCoverControllerDelegate
  209. /// 切换结果
  210. - (void)coverController:(DZMCoverController *)coverController currentController:(UIViewController *)currentController finish:(BOOL)isFinish {
  211. if (!isFinish) { // 切换失败
  212. TempViewController *vc = (TempViewController *)currentController;
  213. self.number = vc.index;
  214. }
  215. }
  216. /// 上一个控制器
  217. - (UIViewController *)coverController:(DZMCoverController *)coverController getAboveControllerWithCurrentController:(UIViewController *)currentController {
  218. if (self.number == 0) {
  219. return nil;
  220. }
  221. self.number -= 1;
  222. return [self creatSubVC];
  223. }
  224. /// 下一个控制器
  225. - (UIViewController *)coverController:(DZMCoverController *)coverController getBelowControllerWithCurrentController:(UIViewController *)currentController {
  226. if (self.number==self.questionArr.count-1) {
  227. return nil;
  228. }
  229. self.number += 1;
  230. return [self creatSubVC];
  231. }
  232. #pragma mark - LazyLoad
  233. - (NSMutableArray *)questionArr {
  234. if (!_questionArr) {
  235. _questionArr = [NSMutableArray array];
  236. }
  237. return _questionArr;
  238. }
  239. - (UILabel *)titleLab {
  240. if (!_titleLab) {
  241. _titleLab = [UILabel new];
  242. _titleLab.textAlignment = NSTextAlignmentCenter;
  243. _titleLab.frame = CGRectMake(0, 0, kScreenWidth, kNavOffSet);
  244. self.navigationItem.titleView = _titleLab;
  245. }
  246. return _titleLab;
  247. }
  248. - (UISegmentedControl *)segmentedControl {
  249. if (!_segmentedControl) {
  250. NSArray * _titles = @[@"答题模式", @"背题模式"];
  251. _segmentedControl = [[UISegmentedControl alloc] initWithItems:_titles];
  252. _segmentedControl.selectedSegmentIndex = _showAnswer;
  253. _segmentedControl.tintColor = [UIColor clearColor];
  254. _selLab = [[UILabel alloc] initWithFrame:CGRectMake(120 * HeightScale + (170 * HeightScale) * (int)_showAnswer, _segmentedControl.frame.size.height + 5, 12, 2)];
  255. [_segmentedControl addSubview:_selLab];
  256. [_segmentedControl addTarget:self action:@selector(segmentValueChanged:) forControlEvents:UIControlEventValueChanged];
  257. self.navigationItem.titleView = _segmentedControl;
  258. }
  259. return _segmentedControl;
  260. }
  261. - (VipSubjectViewController *)collectionViewController {
  262. if (!_collectionViewController) {
  263. _collectionViewController = [[VipSubjectViewController alloc] init];
  264. _collectionViewController.questionArr = self.questionArr;
  265. }
  266. return _collectionViewController;
  267. }
  268. - (ToolsBarView *)toolsBarView {
  269. if (!_toolsBarView) {
  270. _toolsBarView = [[ToolsBarView alloc] initWithFrame:CGRectMake(0, kScreenHeight - 44 - kSafeAreaBottomHeight - kNavOffSet, kScreenWidth, 44)];
  271. [RACObserve(self, number) subscribeNext:^(id _Nullable x) {
  272. [_toolsBarView.listBtn setTitleNormal:[NSString stringWithFormat:@"%ld/%lu",[x integerValue] + 1,(unsigned long)self.questionArr.count]];
  273. }];
  274. }
  275. return _toolsBarView;
  276. }
  277. @end