RDSRoomVC.m 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. //
  2. // RDSRoomVC.m
  3. // Temperature
  4. //
  5. // Created by RD on 2022/11/2.
  6. //
  7. #import "RDSRoomVC.h"
  8. #import "RDSRoomCell.h"
  9. #import "RDSAirControlVC.h"
  10. #import "RDSSubControlVC.h"
  11. #import "RDSAddRoomView.h"
  12. #import "RDSResetDeviceVC.h"
  13. #import <MJRefresh/MJRefresh.h>
  14. #import "GCDTimer.h"// 轮询定时器
  15. static NSString * const RDSRoomCellID = @"RDSRoomCellID";
  16. @interface RDSRoomVC ()<UICollectionViewDelegate, UICollectionViewDataSource>
  17. @property (nonatomic, strong) RDSAddRoomView *addView;
  18. @property (nonatomic, weak) UICollectionView *collectionView;
  19. @property (nonatomic, strong) UIBarButtonItem *addBtn;
  20. @property (nonatomic, strong) UIBarButtonItem *editBtn;
  21. @property (nonatomic, strong) UIBarButtonItem *finishBtn;
  22. @property (nonatomic, assign) BOOL isEdit;// 是否在编辑房间
  23. @property (nonatomic, strong) GCDTimer *gcdTimer;
  24. @end
  25. @implementation RDSRoomVC
  26. - (void)viewDidLoad {
  27. [super viewDidLoad];
  28. // Do any additional setup after loading the view.
  29. self.navigationItem.title = @"我的房间";
  30. [self p_navAddRoomItem];
  31. [self p_navEditItem];
  32. [self p_setupCollectionView];
  33. [self p_setUpTimer];
  34. }
  35. - (void)viewDidAppear:(BOOL)animated{
  36. [super viewDidAppear:animated];
  37. [_gcdTimer resumeTimer];// 开始轮询
  38. }
  39. - (void)viewDidDisappear:(BOOL)animated{
  40. [super viewDidDisappear:animated];
  41. [_gcdTimer pauseTimer];// 暂停轮询
  42. }
  43. - (void)p_navAddRoomItem{
  44. [self.navigationItem setLeftBarButtonItem:self.addBtn];
  45. }
  46. - (void)p_navEditItem{
  47. [self.navigationItem setRightBarButtonItem:self.editBtn];
  48. }
  49. - (void)p_navFinishItem{
  50. [self.navigationItem setRightBarButtonItem:self.finishBtn];
  51. }
  52. - (UIBarButtonItem *)addBtn{
  53. if(_addBtn == nil){
  54. UIBarButtonItem *item = [RDSBarButtonItem barButtonItemWithTitle:@"添加" color:kTextColor target:self action:@selector(p_onAddRoomBtn)];
  55. _addBtn = item;
  56. }
  57. return _addBtn;
  58. }
  59. - (UIBarButtonItem *)editBtn{
  60. if(_editBtn == nil){
  61. UIBarButtonItem *item = [RDSBarButtonItem barButtonItemWithTitle:@"编辑" color:kTextColor target:self action:@selector(p_onEitdBtn)];
  62. _editBtn = item;
  63. }
  64. return _editBtn;
  65. }
  66. - (UIBarButtonItem *)finishBtn{
  67. if(_finishBtn == nil){
  68. UIBarButtonItem *item = [RDSBarButtonItem barButtonItemWithTitle:@"完成" color:RDSGreenColor target:self action:@selector(p_onEitdFinishBtn)];
  69. _finishBtn = item;
  70. }
  71. return _finishBtn;
  72. }
  73. - (void)p_onEitdBtn{
  74. [_gcdTimer pauseTimer];// 暂停轮询
  75. _isEdit = YES;
  76. [self p_navFinishItem];
  77. self.tabBarController.tabBar.hidden = YES;
  78. [self.collectionView reloadData];
  79. }
  80. - (void)p_onEitdFinishBtn{
  81. [_gcdTimer resumeTimer];// 开始轮询
  82. _isEdit = NO;
  83. [self p_navEditItem];
  84. self.tabBarController.tabBar.hidden = NO;
  85. [self.collectionView reloadData];
  86. }
  87. - (void)p_onAddRoomBtn{
  88. RDSResetDeviceVC *vc = [[RDSResetDeviceVC alloc] init];
  89. vc.hidesBottomBarWhenPushed = YES;
  90. [self pushViewController:vc animated:YES];
  91. }
  92. - (void)p_setupCollectionView {
  93. UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
  94. CGFloat viewW = (SCREEN_WIDTH-20*2-10)/2;
  95. layout.itemSize = CGSizeMake(viewW, viewW);
  96. layout.minimumLineSpacing = 15;
  97. layout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
  98. layout.scrollDirection = UICollectionViewScrollDirectionVertical;
  99. layout.sectionHeadersPinToVisibleBounds = YES;
  100. // UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:layout];
  101. UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
  102. collectionView.showsHorizontalScrollIndicator = NO;
  103. collectionView.showsVerticalScrollIndicator = NO;
  104. collectionView.backgroundColor = UIColor.clearColor;
  105. [collectionView registerNib:[UINib nibWithNibName:@"RDSRoomCell" bundle:nil] forCellWithReuseIdentifier:RDSRoomCellID];
  106. collectionView.delegate = self;
  107. collectionView.dataSource = self;
  108. collectionView.pagingEnabled = NO;
  109. [self.view addSubview:collectionView];
  110. self.collectionView = collectionView;
  111. [collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
  112. make.left.equalTo(self.view);
  113. make.right.equalTo(self.view);
  114. if (@available(iOS 11.0, *)) {
  115. make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
  116. make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
  117. } else {
  118. make.top.equalTo(self.view);
  119. make.bottom.equalTo(self.view.mas_bottom);
  120. }
  121. }];
  122. MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(p_getHomeDetail)];
  123. header.automaticallyChangeAlpha = YES;
  124. header.lastUpdatedTimeLabel.hidden = YES;
  125. self.collectionView.mj_header = header;
  126. }
  127. // 弃用
  128. //- (void)reloadData{
  129. //
  130. // RDS_WEAKSELF(weakSelf)
  131. // [RDSRoomModel rds_getRoomListFinished:^(NSError * _Nonnull error) {
  132. //
  133. // weakSelf.addView.hidden = (BOOL)TheDataManager.rooms.count;
  134. // if(TheDataManager.rooms.count == 0){
  135. // [weakSelf p_onEitdFinishBtn];
  136. // }
  137. //
  138. // [weakSelf.collectionView.mj_header endRefreshing];
  139. // [weakSelf.collectionView reloadData];
  140. // }];
  141. //}
  142. - (void)p_getHomeDetail{
  143. RDS_WEAKSELF(weakSelf)
  144. [RDSHomeModel rds_getHomeDetailWithHomeId:TheDataManager.current_home_id finished:^(RDSHomeModel *home, NSError *error) {
  145. weakSelf.addView.hidden = (BOOL)TheDataManager.rooms.count;
  146. if(TheDataManager.rooms.count == 0){
  147. [weakSelf p_onEitdFinishBtn];
  148. }
  149. [weakSelf.collectionView.mj_header endRefreshing];
  150. [weakSelf.collectionView reloadData];
  151. }];
  152. }
  153. #pragma mark - 轮询 开始-暂停要一一对应
  154. // 定时轮询 3秒一次
  155. - (void)p_setUpTimer{
  156. self.gcdTimer = [[GCDTimer alloc] init];
  157. RDS_WEAKSELF(weakSelf)
  158. [_gcdTimer scheduledTimerWithTimeInterval:3 afterTime:0 repeats:YES block:^{
  159. [weakSelf p_getHomeDetail];
  160. }];
  161. }
  162. - (void)p_restartTimer{
  163. [_gcdTimer restartTimer];
  164. }
  165. #pragma mark - UICollectionViewDelegate
  166. - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
  167. [collectionView deselectItemAtIndexPath:indexPath animated:YES];
  168. if (_isEdit) return;
  169. RDSRoomModel *roomModel = TheDataManager.rooms[indexPath.row];
  170. if(roomModel.is_master){
  171. RDSAirControlVC *vc = [[RDSAirControlVC alloc] init];
  172. vc.hidesBottomBarWhenPushed = YES;
  173. vc.roomModel = roomModel;
  174. [self pushViewController:vc animated:YES];
  175. }
  176. else{
  177. RDSSubControlVC *vc = [[RDSSubControlVC alloc] init];
  178. vc.hidesBottomBarWhenPushed = YES;
  179. vc.roomModel = roomModel;
  180. [self pushViewController:vc animated:YES];
  181. }
  182. }
  183. #pragma mark - UICollectionViewDataSource
  184. - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
  185. return 1;
  186. }
  187. - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
  188. return TheDataManager.rooms.count;
  189. }
  190. - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
  191. RDSRoomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:RDSRoomCellID forIndexPath:indexPath];
  192. RDSRoomModel *model = TheDataManager.rooms[indexPath.row];
  193. cell.model = model;
  194. cell.isEdit = _isEdit;
  195. RDS_WEAKSELF(weakSelf)
  196. cell.onPowerClick = ^(BOOL onOff) {
  197. // 开关
  198. if(model.is_master){
  199. [RDSDemoApiHelper rds_setPower:onOff control_number:model.control_number success:^(id responseObject) {
  200. if ([responseObject[@"code"] intValue] != 0) {
  201. [RDSHudShower showBottomToast:responseObject[@"message"]];
  202. }
  203. } failure:^(NSError *error) {
  204. [RDSHudShower showBottomToast:@"连接服务器失败"];
  205. }];
  206. }
  207. else{
  208. [RDSDemoApiHelper rds_setSubDevPower:onOff control_number:model.control_number success:^(id responseObject) {
  209. if ([responseObject[@"code"] intValue] != 0) {
  210. [RDSHudShower showBottomToast:responseObject[@"message"]];
  211. }
  212. } failure:^(NSError *error) {
  213. [RDSHudShower showBottomToast:@"连接服务器失败"];
  214. }];
  215. }
  216. };
  217. cell.onDelClick = ^{
  218. [weakSelf p_onDelAction:model.record_id];
  219. };
  220. return cell;
  221. }
  222. - (void)p_onDelAction:(NSString *)roomId{
  223. RDS_WEAKSELF(weakSelf)
  224. [self rds_alertMessage:@"确定删除所选房间吗?" doneAction:^{
  225. [RDSRoomModel rds_delRoomId:roomId finished:^(NSError * _Nonnull error) {
  226. [weakSelf p_getHomeDetail];
  227. }];
  228. }];
  229. }
  230. // 不允许高亮
  231. - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath{
  232. RDSRoomCell *cell = (RDSRoomCell*)[self.collectionView cellForItemAtIndexPath:indexPath];
  233. cell.highlighted = NO;
  234. }
  235. - (RDSAddRoomView *)addView{
  236. if(_addView == nil){
  237. _addView = [RDSAddRoomView rds_loadViewFromNib];
  238. _addView.hidden = YES;
  239. [self.collectionView addSubview:_addView];
  240. [_addView mas_makeConstraints:^(MASConstraintMaker *make) {
  241. make.left.equalTo(self.view);//.offset(20);
  242. make.right.equalTo(self.view);//.offset(-20);
  243. make.height.equalTo(@300);
  244. make.top.equalTo(@(SCREEN_HEIGHT*0.2));
  245. }];
  246. RDS_WEAKSELF(weakSelf)
  247. _addView.onAddClick = ^{
  248. [weakSelf p_onAddRoomBtn];
  249. };
  250. }
  251. return _addView;
  252. }
  253. - (void)dealloc{
  254. // 取消轮询
  255. [_gcdTimer stopTimer];
  256. DDLog(@"dealloc~~");
  257. }
  258. @end