CYSendMSGGroupViewController.m 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. //
  2. // CYSendMSGGroupViewController.m
  3. // shiku_im
  4. //
  5. // Created by Ron on 2019/11/23.
  6. // Copyright © 2019 Reese. All rights reserved.
  7. //
  8. #import "CYSendMSGGroupViewController.h"
  9. #import "JXCell.h"
  10. #import "UIImage+Color.h"
  11. #import "QCheckBox.h"
  12. #import "JXChatViewController.h"
  13. #import "JXSelectLabelsVC.h"
  14. #import "JXLabelObject.h"
  15. #import "BMChineseSort.h"
  16. #import "CYModel.h"
  17. #import "CYManager.h"
  18. #import "CYGroupSendMsgViewController.h"
  19. @interface CYSendMSGGroupViewController ()<UITextFieldDelegate, JXSelectLabelsVCDelegate>
  20. @property (nonatomic, strong) NSMutableArray *array;
  21. @property (nonatomic, strong) UITextField *seekTextField;
  22. @property (nonatomic, strong) NSMutableArray *searchArray;
  23. @property (nonatomic, strong) NSSet * existSet;
  24. @property (nonatomic, strong) NSMutableArray *selUserIdArray;
  25. @property (nonatomic, strong) NSMutableArray *selUserNameArray;
  26. @property (nonatomic, strong) UIButton *nextBtn;
  27. @property (nonatomic, strong) UIView *tableHeadView;
  28. @property (nonatomic, strong) UILabel *selectLabelTip;
  29. @property (nonatomic, strong) UILabel *selectLabels;
  30. @property (nonatomic, strong) NSMutableArray *selLabelsArr;
  31. //排序后的出现过的拼音首字母数组
  32. @property(nonatomic,strong)NSMutableArray *indexArray;
  33. //排序好的结果数组
  34. @property(nonatomic,strong)NSMutableArray *letterResultArr;
  35. @property (nonatomic, strong) NSMutableArray *checkBoxArr;
  36. @property (nonatomic, strong) UIButton *allSelect;
  37. @end
  38. @implementation CYSendMSGGroupViewController
  39. - (void)viewDidLoad {
  40. [super viewDidLoad];
  41. // Do any additional setup after loading the view.
  42. self.heightHeader = JX_SCREEN_TOP;
  43. self.heightFooter = JX_SCREEN_BOTTOM;
  44. self.isGotoBack = YES;
  45. //self.view.frame = g_window.bounds;
  46. self.isShowFooterPull = NO;
  47. [self createHeadAndFoot];
  48. _array = [NSMutableArray array];
  49. _searchArray = [NSMutableArray array];
  50. _selUserIdArray = [NSMutableArray array];
  51. _selUserNameArray = [NSMutableArray array];
  52. _selLabelsArr = [NSMutableArray array];
  53. _checkBoxArr = [NSMutableArray array];
  54. // self.title = Localized(@"选择群组");
  55. self.title = @"选择群组";
  56. UIButton *allSelect = [UIButton buttonWithType:UIButtonTypeSystem];
  57. [allSelect setTitle:Localized(@"JX_CheckAll") forState:UIControlStateNormal];
  58. [allSelect setTitle:Localized(@"JX_Cencal") forState:UIControlStateSelected];
  59. [allSelect setTitleColor:THESIMPLESTYLE ? [UIColor blackColor] : [UIColor whiteColor] forState:UIControlStateNormal];
  60. [allSelect setTitleColor:THESIMPLESTYLE ? [UIColor blackColor] : [UIColor whiteColor] forState:UIControlStateSelected];
  61. // [allSelect setBackgroundImage:[UIImage createImageWithColor:[UIColor clearColor]] forState:UIControlStateNormal];
  62. // [allSelect setBackgroundImage:[UIImage createImageWithColor:[UIColor clearColor]] forState:UIControlStateSelected];
  63. allSelect.tintColor = [UIColor clearColor];
  64. allSelect.frame = CGRectMake(JX_SCREEN_WIDTH - 70, JX_SCREEN_TOP - 34, 70, 24);
  65. [allSelect addTarget:self action:@selector(allSelect:) forControlEvents:UIControlEventTouchUpInside];
  66. [self.tableHeader addSubview:allSelect];
  67. _allSelect = allSelect;
  68. self.nextBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.tableFooter.frame.size.width, 48)];
  69. self.nextBtn.titleLabel.font = [UIFont systemFontOfSize:15.0];
  70. [self.nextBtn setTitle:Localized(@"JX_NextStep") forState:UIControlStateNormal];
  71. [self.nextBtn setTitleColor:THEMECOLOR forState:UIControlStateNormal];
  72. [self.nextBtn addTarget:self action:@selector(nextBtnAction:) forControlEvents:UIControlEventTouchUpInside];
  73. [self.tableFooter addSubview:self.nextBtn];
  74. //搜索输入框
  75. _tableHeadView = [[UIView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, 50)];
  76. // backView.backgroundColor = HEXCOLOR(0xf0f0f0);
  77. [self.view addSubview:_tableHeadView];
  78. // UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(backView.frame.size.width-5-45, 5, 45, 30)];
  79. // [cancelBtn setTitle:Localized(@"JX_Cencal") forState:UIControlStateNormal];
  80. // [cancelBtn setTitleColor:THEMECOLOR forState:UIControlStateNormal];
  81. // [cancelBtn addTarget:self action:@selector(cancelBtnAction) forControlEvents:UIControlEventTouchUpInside];
  82. // cancelBtn.titleLabel.font = SYSFONT(14);
  83. // [backView addSubview:cancelBtn];
  84. _seekTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 10, _tableHeadView.frame.size.width - 30, 30)];
  85. _seekTextField.placeholder = Localized(@"JX_EnterKeyword");
  86. _seekTextField.textColor = [UIColor blackColor];
  87. [_seekTextField setFont:SYSFONT(14)];
  88. _seekTextField.backgroundColor = HEXCOLOR(0xf0f0f0);
  89. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_search"]];
  90. UIView *leftView = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 30, 30)];
  91. // imageView.center = CGPointMake(leftView.frame.size.width/2, leftView.frame.size.height/2);
  92. imageView.center = leftView.center;
  93. [leftView addSubview:imageView];
  94. _seekTextField.leftView = leftView;
  95. _seekTextField.leftViewMode = UITextFieldViewModeAlways;
  96. _seekTextField.borderStyle = UITextBorderStyleNone;
  97. _seekTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  98. _seekTextField.delegate = self;
  99. _seekTextField.returnKeyType = UIReturnKeyGoogle;
  100. [_tableHeadView addSubview:_seekTextField];
  101. [_seekTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
  102. UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 49.5, JX_SCREEN_WIDTH, .5)];
  103. lineView.backgroundColor = HEXCOLOR(0xdcdcdc);
  104. [_tableHeadView addSubview:lineView];
  105. //去掉标签
  106. // UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(lineView.frame), JX_SCREEN_WIDTH, 54)];
  107. // [btn addTarget:self action:@selector(selectLabels:) forControlEvents:UIControlEventTouchUpInside];
  108. // [_tableHeadView addSubview:btn];
  109. //
  110. // _selectLabelTip = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, btn.frame.size.width, btn.frame.size.height)];
  111. // _selectLabelTip.font = [UIFont systemFontOfSize:16.0];
  112. // _selectLabelTip.text = Localized(@"JX_SelectTagGroup");
  113. // [btn addSubview:_selectLabelTip];
  114. //
  115. // _selectLabels = [[UILabel alloc] initWithFrame:CGRectMake(15, CGRectGetMaxY(_selectLabelTip.frame), btn.frame.size.width, btn.frame.size.height - CGRectGetMaxY(_selectLabelTip.frame))];
  116. // _selectLabels.font = [UIFont systemFontOfSize:15.0];
  117. // _selectLabels.text = @"[标签1,标签2]";
  118. // _selectLabels.textColor = [UIColor lightGrayColor];
  119. // [btn addSubview:_selectLabels];
  120. //
  121. // lineView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(btn.frame) + 4.5, JX_SCREEN_WIDTH, .5)];
  122. // lineView.backgroundColor = HEXCOLOR(0xdcdcdc);
  123. // [_tableHeadView addSubview:lineView];
  124. _tableHeadView.frame = CGRectMake(_tableHeadView.frame.origin.x, _tableHeadView.frame.origin.y, _tableHeadView.frame.size.width, CGRectGetMaxY(lineView.frame));
  125. self.tableView.tableHeaderView = _tableHeadView;
  126. [self getArrayData];
  127. }
  128. - (void)selectLabels:(UIButton *)btn {
  129. JXSelectLabelsVC *vc = [[JXSelectLabelsVC alloc] init];
  130. vc.delegate = self;
  131. vc.selLabels = [NSMutableArray arrayWithArray:_selLabelsArr];
  132. [g_navigation pushViewController:vc animated:YES];
  133. }
  134. - (void)selectLabelsVC:(JXSelectLabelsVC *)selectLabelsVC selectLabelsArray:(NSMutableArray *)array {
  135. _selLabelsArr = [NSMutableArray arrayWithArray:array];
  136. NSMutableString *nameStr = [NSMutableString string];
  137. for (NSInteger i = 0; i < array.count; i ++) {
  138. JXLabelObject *labelObj = array[i];
  139. if (i == 0) {
  140. [nameStr appendFormat:@"[\"%@",labelObj.groupName];
  141. }else if (i == array.count - 1) {
  142. [nameStr appendFormat:@",%@\"]",labelObj.groupName];
  143. }else {
  144. [nameStr appendFormat:@",%@",labelObj.groupName];
  145. }
  146. if (array.count == 1) {
  147. [nameStr appendString:@"\"]"];
  148. }
  149. }
  150. self.selectLabels.text = nameStr;
  151. if (nameStr.length > 0) {
  152. self.selectLabelTip.frame = CGRectMake(self.selectLabelTip.frame.origin.x, self.selectLabelTip.frame.origin.y, self.selectLabelTip.frame.size.width, 27);
  153. self.selectLabels.frame = CGRectMake(self.selectLabels.frame.origin.x, CGRectGetMaxY(_selectLabelTip.frame), self.selectLabels.frame.size.width, 27);
  154. }else {
  155. self.selectLabelTip.frame = CGRectMake(self.selectLabelTip.frame.origin.x, self.selectLabelTip.frame.origin.y, self.selectLabelTip.frame.size.width, 54);
  156. self.selectLabels.frame = CGRectMake(self.selectLabels.frame.origin.x, CGRectGetMaxY(_selectLabelTip.frame), self.selectLabels.frame.size.width, 0);
  157. }
  158. }
  159. - (void)allSelect:(UIButton *)btn {
  160. btn.selected = !btn.selected;
  161. [_selUserIdArray removeAllObjects];
  162. [_selUserNameArray removeAllObjects];
  163. if (btn.selected) {
  164. NSArray *array;
  165. if (_seekTextField.text.length > 0) {
  166. array = _searchArray;
  167. }else {
  168. array = _array;
  169. }
  170. for (JXUserObject *user in array) {
  171. [_selUserIdArray addObject:user.userId];
  172. [_selUserNameArray addObject:user.userNickname];
  173. }
  174. }
  175. [self.nextBtn setTitle:[NSString stringWithFormat:@"%@(%ld)",Localized(@"JX_NextStep"),_selUserIdArray.count] forState:UIControlStateNormal];
  176. [_checkBoxArr removeAllObjects];
  177. [self.tableView reloadData];
  178. }
  179. - (void)nextBtnAction:(UIButton *)btn {
  180. NSMutableArray *selUserIdArray = [NSMutableArray array];
  181. NSMutableArray *selUserNameArray = [NSMutableArray array];
  182. // NSMutableArray *selUserIdArray2 = [NSMutableArray array];
  183. [selUserIdArray addObjectsFromArray:_selUserIdArray];
  184. [selUserNameArray addObjectsFromArray:_selUserNameArray];
  185. for (NSInteger i = 0; i < self.selLabelsArr.count; i ++) {
  186. JXLabelObject *labelObj = self.selLabelsArr[i];
  187. NSArray *labelUserIds = [labelObj.userIdList componentsSeparatedByString:@","];
  188. for (NSInteger j = 0; j < labelUserIds.count; j ++) {
  189. NSString *labelUserId = labelUserIds[j];
  190. NSString *labelUserName = [JXUserObject getUserNameWithUserId:labelUserId];
  191. BOOL flag = NO;
  192. NSMutableArray *array = [NSMutableArray arrayWithArray:selUserIdArray];
  193. for (NSInteger m = 0; m < array.count; m ++) {
  194. NSString *selUserId = array[m];
  195. if ([labelUserId isEqualToString:selUserId]) {
  196. flag = YES;
  197. break;
  198. }
  199. }
  200. if (!flag) {
  201. [selUserIdArray addObject:labelUserId];
  202. [selUserNameArray addObject:labelUserName];
  203. }
  204. }
  205. }
  206. if (!selUserIdArray.count) {
  207. [g_App showAlert:Localized(@"JX_SelectGroupUsers")];
  208. return;
  209. }
  210. // JXChatViewController *vc = [[JXChatViewController alloc] init];
  211. // vc.userIds = selUserIdArray;
  212. CYManager.sharedManager.getModel.selGroupNameArr = selUserNameArray;
  213. CYManager.sharedManager.getModel.selGroupIdArr = selUserIdArray;
  214. // vc.userNames = selUserNameArray;
  215. // vc.isGroupMessages = YES;
  216. // [g_navigation pushViewController:vc animated:YES];
  217. [g_navigation popToViewController:[CYGroupSendMsgViewController class] animated:true];
  218. }
  219. - (void) cancelBtnAction {
  220. _seekTextField.text = nil;
  221. [_seekTextField resignFirstResponder];
  222. [self getArrayData];
  223. }
  224. - (void)didSelectedCheckBox:(QCheckBox *)checkbox checked:(BOOL)checked{
  225. [self.view endEditing:YES];
  226. JXUserObject *user;
  227. if (_seekTextField.text.length > 0) {
  228. user = _searchArray[checkbox.tag % 10000];
  229. }else{
  230. user = [[self.letterResultArr objectAtIndex:checkbox.tag / 10000] objectAtIndex:checkbox.tag % 10000];
  231. }
  232. if(checked){
  233. BOOL flag = NO;
  234. for (NSInteger i = 0; i < _selUserIdArray.count; i ++) {
  235. NSString *selUserId = _selUserIdArray[i];
  236. if ([selUserId isEqualToString:user.userId]) {
  237. flag = YES;
  238. return;
  239. }
  240. }
  241. [_selUserIdArray addObject:user.userId];
  242. [_selUserNameArray addObject:user.userNickname];
  243. }
  244. else{
  245. [_selUserIdArray removeObject:user.userId];
  246. [_selUserNameArray removeObject:user.userNickname];
  247. }
  248. if (_selUserIdArray.count <= 0) {
  249. [self.nextBtn setTitle:[NSString stringWithFormat:@"%@",Localized(@"JX_NextStep")] forState:UIControlStateNormal];
  250. }else {
  251. [self.nextBtn setTitle:[NSString stringWithFormat:@"%@(%ld)",Localized(@"JX_NextStep"),_selUserIdArray.count] forState:UIControlStateNormal];
  252. }
  253. if (_selUserIdArray.count < _array.count) {
  254. [_allSelect setSelected:NO];
  255. } else {
  256. [_allSelect setSelected:YES];
  257. }
  258. }
  259. - (void) textFieldDidChange:(UITextField *)textField {
  260. if (textField.text.length <= 0) {
  261. [self getArrayData];
  262. return;
  263. }
  264. [_searchArray removeAllObjects];
  265. for (NSInteger i = 0; i < _array.count; i ++) {
  266. JXUserObject * user = _array[i];
  267. NSString *userStr = [user.userNickname lowercaseString];
  268. NSString *textStr = [textField.text lowercaseString];
  269. if ([userStr rangeOfString:textStr].location != NSNotFound) {
  270. [_searchArray addObject:user];
  271. }
  272. }
  273. [_checkBoxArr removeAllObjects];
  274. [self.tableView reloadData];
  275. }
  276. -(void)getArrayData{
  277. _array=[[JXUserObject sharedInstance] fetchAllRoomsFromLocal];
  278. //选择拼音 转换的 方法
  279. BMChineseSortSetting.share.sortMode = 2; // 1或2
  280. //排序 Person对象
  281. [BMChineseSort sortAndGroup:_array key:@"userNickname" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  282. if (isSuccess) {
  283. self.indexArray = sectionTitleArr;
  284. self.letterResultArr = sortedObjArr;
  285. [_checkBoxArr removeAllObjects];
  286. [self.tableView reloadData];
  287. }
  288. }];
  289. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  290. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickname"];
  291. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickname"];
  292. // [self.tableView reloadData];
  293. }
  294. #pragma mark ---------tableView协议----------------
  295. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  296. {
  297. if (_seekTextField.text.length > 0) {
  298. return 1;
  299. }
  300. return [self.indexArray count];
  301. }
  302. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
  303. if (_seekTextField.text.length > 0) {
  304. return Localized(@"JXFriend_searchTitle");
  305. }
  306. return [self.indexArray objectAtIndex:section];
  307. }
  308. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  309. {
  310. if (_seekTextField.text.length > 0) {
  311. return _searchArray.count;
  312. }
  313. return [(NSMutableArray *)[self.letterResultArr objectAtIndex:section] count];
  314. }
  315. -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
  316. if (_seekTextField.text.length > 0) {
  317. return nil;
  318. }
  319. return self.indexArray;
  320. }
  321. - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
  322. return index;
  323. }
  324. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  325. {
  326. NSArray * tempArray;
  327. if (_seekTextField.text.length > 0) {
  328. tempArray = _searchArray;
  329. }else{
  330. tempArray = [self.letterResultArr objectAtIndex:indexPath.section];
  331. }
  332. JXCell *cell=nil;
  333. NSString* cellName = [NSString stringWithFormat:@"selVC_%d",(int)indexPath.row];
  334. // cell = [tableView dequeueReusableCellWithIdentifier:cellName];
  335. // QCheckBox* btn;
  336. // if (!cell) {
  337. cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  338. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  339. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  340. btn.frame = CGRectMake(20, 15, 25, 25);
  341. [cell addSubview:btn];
  342. // }
  343. JXUserObject *user=tempArray[indexPath.row];
  344. btn.tag = indexPath.section * 10000 + indexPath.row;
  345. BOOL flag = NO;
  346. for (NSInteger i = 0; i < _selUserIdArray.count; i ++) {
  347. NSString *selUserId = _selUserIdArray [i];
  348. if ([user.userId isEqualToString:selUserId]) {
  349. flag = YES;
  350. break;
  351. }
  352. }
  353. btn.checked = flag;
  354. [_checkBoxArr addObject:btn];
  355. // cell = [[JXCell alloc] init];
  356. [_table addToPool:cell];
  357. cell.title = user.userNickname;
  358. // cell.subtitle = user.userId;
  359. cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  360. cell.userId = user.userId;
  361. cell.isSmall = YES;
  362. // [cell headImageViewImageWithUserId:nil roomId:nil];
  363. NSString * roomIdStr = user.roomId;
  364. cell.roomId = roomIdStr;
  365. [cell headImageViewImageWithUserId:user.userId roomId:roomIdStr];
  366. cell.headImageView.frame = CGRectMake(cell.headImageView.frame.origin.x + 50, cell.headImageView.frame.origin.y, cell.headImageView.frame.size.width, cell.headImageView.frame.size.height);
  367. cell.lbTitle.frame = CGRectMake(cell.lbTitle.frame.origin.x + 50, cell.lbTitle.frame.origin.y, cell.lbTitle.frame.size.width, cell.lbTitle.frame.size.height);
  368. return cell;
  369. }
  370. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  371. {
  372. QCheckBox *checkBox = nil;
  373. for (NSInteger i = 0; i < _checkBoxArr.count; i ++) {
  374. QCheckBox *btn = _checkBoxArr[i];
  375. if (btn.tag / 10000 == indexPath.section && btn.tag % 10000 == indexPath.row) {
  376. checkBox = btn;
  377. break;
  378. }
  379. }
  380. checkBox.selected = !checkBox.selected;
  381. [self didSelectedCheckBox:checkBox checked:checkBox.selected];
  382. }
  383. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  384. {
  385. return 54;
  386. }
  387. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  388. [self.view endEditing:YES];
  389. }
  390. /*
  391. #pragma mark - Navigation
  392. // In a storyboard-based application, you will often want to do a little preparation before navigation
  393. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  394. // Get the new view controller using [segue destinationViewController].
  395. // Pass the selected object to the new view controller.
  396. }
  397. */
  398. @end