JXSetLabelVC.m 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. //
  2. // JXSetLabelVC.m
  3. // shiku_im
  4. //
  5. // Created by p on 2018/6/26.
  6. // Copyright © 2018年 Reese. All rights reserved.
  7. //
  8. #import "JXSetLabelVC.h"
  9. #import "JXLabelObject.h"
  10. #import "UIImage+Color.h"
  11. #define HEIGHT 54
  12. @interface JXSetLabelVC ()<UITextFieldDelegate,UITextViewDelegate,UIScrollViewDelegate>
  13. @property (nonatomic, strong) UIScrollView *scrollView;
  14. @property (nonatomic, strong) UIScrollView *allScrollView;
  15. @property (nonatomic, strong) NSMutableArray *labelsArray; // 已有标签按钮
  16. @property (nonatomic, strong) NSMutableArray *allLabelsArray; // 所有标签按钮
  17. @property (nonatomic, strong) UITextField *name; //备注
  18. @property (nonatomic, strong) UITextField *textField; //标签
  19. @property (nonatomic, strong) UITextView *detail; //描述
  20. @property (nonatomic, strong) UILabel *labT;
  21. @property (nonatomic, strong) UIView *baseView;
  22. @property (nonatomic, strong) UIColor *textVColor;
  23. @end
  24. @implementation JXSetLabelVC
  25. - (void)viewDidLoad {
  26. [super viewDidLoad];
  27. // Do any additional setup after loading the view.
  28. if (_array.count <= 0) {
  29. _array = [[JXLabelObject sharedInstance] fetchLabelsWithUserId:self.user.userId];
  30. }
  31. if (_allArray.count <= 0) {
  32. _allArray = [[JXLabelObject sharedInstance] fetchAllLabelsFromLocal];
  33. }
  34. for (JXLabelObject *labelObj in _array) {
  35. NSString *userIdStr = labelObj.userIdList;
  36. NSArray *userIds = [userIdStr componentsSeparatedByString:@","];
  37. if (userIdStr.length <= 0) {
  38. userIds = nil;
  39. }
  40. NSMutableArray *newUserIds = [userIds mutableCopy];
  41. for (NSInteger i = 0; i < userIds.count; i ++) {
  42. NSString *userId = userIds[i];
  43. NSString *userName = [JXUserObject getUserNameWithUserId:userId];
  44. if (!userName || userName.length <= 0) {
  45. [newUserIds removeObject:userId];
  46. }
  47. }
  48. NSString *string = [newUserIds componentsJoinedByString:@","];
  49. labelObj.userIdList = string;
  50. [labelObj update];
  51. }
  52. _labelsArray = [NSMutableArray array];
  53. _allLabelsArray = [NSMutableArray array];
  54. self.heightHeader = JX_SCREEN_TOP;
  55. self.heightFooter = 0;
  56. self.isGotoBack = YES;
  57. [self createHeadAndFoot];
  58. self.tableBody.delegate = self;
  59. self.tableBody.backgroundColor = HEXCOLOR(0xF2F2F2);
  60. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillHide) name:UIMenuControllerWillHideMenuNotification object:nil];
  61. [self customView];
  62. }
  63. - (void)customView {
  64. JXLabel *p = [self createLabel:self.tableHeader default:Localized(@"JX_Confirm") selector:@selector(onSave)];
  65. p.textColor = [UIColor whiteColor];
  66. p.layer.masksToBounds = YES;
  67. p.layer.cornerRadius = 3.f;
  68. [p setBackgroundColor:THEMECOLOR];
  69. [p setFont:SYSFONT(15)];
  70. p.textAlignment = NSTextAlignmentCenter;
  71. p.frame = CGRectMake(JX_SCREEN_WIDTH - 51 - 15, JX_SCREEN_TOP - 8 - 29, 51, 29);
  72. _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, JX_SCREEN_WIDTH, 50)];
  73. _scrollView.backgroundColor = [UIColor whiteColor];
  74. [self.tableBody addSubview:_scrollView];
  75. _allScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_scrollView.frame), JX_SCREEN_WIDTH, self.tableBody.frame.size.height - CGRectGetMaxY(_scrollView.frame))];
  76. _allScrollView.backgroundColor = [UIColor clearColor];
  77. [self.tableBody addSubview:_allScrollView];
  78. // 创建上部分已有标签视图
  79. [self createLabels];
  80. // 创建下部分所有标签视图
  81. [self createAllLabels];
  82. }
  83. -(JXLabel*)createLabel:(UIView*)parent default:(NSString*)s selector:(SEL)selector{
  84. JXLabel* p = [[JXLabel alloc] initWithFrame:CGRectMake(JX_SCREEN_WIDTH/2,INSETS,JX_SCREEN_WIDTH/2 -20,44-INSETS*2)];
  85. p.userInteractionEnabled = NO;
  86. p.text = s;
  87. p.font = g_factory.font14;
  88. p.textAlignment = NSTextAlignmentLeft;
  89. p.didTouch = selector;
  90. p.delegate = self;
  91. [parent addSubview:p];
  92. return p;
  93. }
  94. // 创建已有标签
  95. - (void)createLabels {
  96. [_scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
  97. [_labelsArray removeAllObjects];
  98. int margin = 15;
  99. int inset = 8;
  100. int x = margin;
  101. int y = margin;
  102. UIButton *lastLabelBtn;
  103. for (NSInteger i = 0; i < _array.count; i ++) {
  104. JXLabelObject *labelObj = _array[i];
  105. CGSize size = [labelObj.groupName boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:16.0]} context:nil].size;
  106. size = CGSizeMake(size.width + 20, size.height + 10);
  107. UIButton *labelBtn = [[UIButton alloc] initWithFrame:CGRectMake(x, y, size.width, 36)];
  108. [labelBtn setTitle:labelObj.groupName forState:UIControlStateNormal];
  109. [labelBtn setTitleColor:HEXCOLOR(0x333333) forState:UIControlStateNormal];
  110. [labelBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
  111. [labelBtn setBackgroundImage:[UIImage createImageWithColor:[UIColor whiteColor]] forState:UIControlStateNormal];
  112. [labelBtn setBackgroundImage:[UIImage createImageWithColor:HEXCOLOR(0x4FC557)] forState:UIControlStateSelected];
  113. labelBtn.titleLabel.font = [UIFont systemFontOfSize:16.0];
  114. labelBtn.layer.cornerRadius = 7.f;
  115. labelBtn.layer.masksToBounds = YES;
  116. labelBtn.layer.borderColor = THEMECOLOR.CGColor;
  117. labelBtn.layer.borderWidth = 1.0;
  118. labelBtn.tag = i;
  119. [labelBtn addTarget:self action:@selector(labelBtnAction:) forControlEvents:UIControlEventTouchUpInside];
  120. [_scrollView addSubview:labelBtn];
  121. [_labelsArray addObject:labelBtn];
  122. lastLabelBtn = labelBtn;
  123. x = CGRectGetMaxX(labelBtn.frame) + inset;
  124. if (i != _array.count - 1) {
  125. JXLabelObject *lastLabelObj = _array[i + 1];
  126. CGSize lastSize = [lastLabelObj.groupName boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:16.0]} context:nil].size;
  127. lastSize = CGSizeMake(lastSize.width + 20, lastSize.height + 10);
  128. if ((x + lastSize.width + margin) > JX_SCREEN_WIDTH) {
  129. x = margin;
  130. y = CGRectGetMaxY(labelBtn.frame) + 10;
  131. }
  132. }
  133. }
  134. if (!_textField) {
  135. _textField = [[UITextField alloc] init];
  136. _textField.placeholder = Localized(@"JX_InputLabel");
  137. _textField.font = [UIFont systemFontOfSize:16.0];
  138. _textField.delegate = self;
  139. _textField.returnKeyType = UIReturnKeyDone;
  140. }
  141. [_scrollView addSubview:_textField];
  142. if (CGRectGetMaxX(lastLabelBtn.frame) + margin + 50 + margin > JX_SCREEN_WIDTH) {
  143. _textField.frame = CGRectMake(margin, CGRectGetMaxY(lastLabelBtn.frame) + margin, JX_SCREEN_WIDTH - margin - margin, 36);
  144. }else {
  145. CGFloat y = lastLabelBtn.frame.origin.y;
  146. if (!lastLabelBtn) {
  147. y = margin;
  148. }
  149. _textField.frame = CGRectMake(CGRectGetMaxX(lastLabelBtn.frame) + margin, y, JX_SCREEN_WIDTH - CGRectGetMaxX(lastLabelBtn.frame) - margin - margin, 36);
  150. }
  151. if ((CGRectGetMaxY(_textField.frame) + margin) > (margin * 4 + 36 * 3)) {
  152. _scrollView.frame = CGRectMake(_scrollView.frame.origin.x, _scrollView.frame.origin.y, _scrollView.frame.size.width, margin * 4 + 36 * 3);
  153. _scrollView.contentSize = CGSizeMake(JX_SCREEN_WIDTH, CGRectGetMaxY(_textField.frame) + margin);
  154. }else {
  155. _scrollView.frame = CGRectMake(_scrollView.frame.origin.x, _scrollView.frame.origin.y, _scrollView.frame.size.width, CGRectGetMaxY(_textField.frame) + margin);
  156. _scrollView.contentSize = CGSizeMake(JX_SCREEN_WIDTH, _scrollView.frame.size.height);
  157. }
  158. [_scrollView setContentOffset:CGPointMake(0, _scrollView.contentSize.height - _scrollView.frame.size.height)];
  159. _allScrollView.frame = CGRectMake(_allScrollView.frame.origin.x, CGRectGetMaxY(_scrollView.frame), _allScrollView.frame.size.width, _allScrollView.frame.size.height);
  160. }
  161. // 创建所有标签
  162. - (void) createAllLabels {
  163. [_allLabelsArray removeAllObjects];
  164. UILabel *allLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, JX_SCREEN_WIDTH, 15)];
  165. allLabel.text = Localized(@"JX_AllLabels");
  166. allLabel.font = [UIFont systemFontOfSize:15.0];
  167. allLabel.textColor = [UIColor grayColor];
  168. [_allScrollView addSubview:allLabel];
  169. int margin = 15;
  170. int inset = 8;
  171. int x = margin;
  172. int y = CGRectGetMaxY(allLabel.frame) + margin;
  173. UIButton *lastLabelBtn;
  174. for (NSInteger i = 0; i < _allArray.count; i ++) {
  175. JXLabelObject *labelObj = _allArray[i];
  176. BOOL flag = NO;
  177. for (JXLabelObject *obj in _array) {
  178. if ([obj.groupName isEqualToString:labelObj.groupName]) {
  179. flag = YES;
  180. break;
  181. }
  182. }
  183. CGSize size = [labelObj.groupName boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:16.0]} context:nil].size;
  184. size = CGSizeMake(size.width + 20, size.height + 10);
  185. UIButton *labelBtn = [[UIButton alloc] initWithFrame:CGRectMake(x, y, size.width, 36)];
  186. [labelBtn setTitle:labelObj.groupName forState:UIControlStateNormal];
  187. [labelBtn setTitleColor: [UIColor blackColor] forState:UIControlStateNormal];
  188. [labelBtn setTitleColor:HEXCOLOR(0x333333) forState:UIControlStateSelected];
  189. [labelBtn setBackgroundImage:[UIImage createImageWithColor:[UIColor clearColor]] forState:UIControlStateNormal];
  190. [labelBtn setBackgroundImage:[UIImage createImageWithColor:[UIColor whiteColor]] forState:UIControlStateSelected];
  191. labelBtn.titleLabel.font = [UIFont systemFontOfSize:16.0];
  192. labelBtn.layer.cornerRadius = 7.f;
  193. labelBtn.layer.masksToBounds = YES;
  194. labelBtn.layer.borderColor = THEMECOLOR.CGColor;
  195. labelBtn.layer.borderWidth = 1.0;
  196. labelBtn.tag = i;
  197. [labelBtn addTarget:self action:@selector(allLabelAction:) forControlEvents:UIControlEventTouchUpInside];
  198. labelBtn.selected = flag;
  199. if (flag) {
  200. labelBtn.layer.borderColor = THEMECOLOR.CGColor;
  201. }else {
  202. labelBtn.layer.borderColor = HEXCOLOR(0xdcdcdc).CGColor;
  203. }
  204. [_allScrollView addSubview:labelBtn];
  205. [_allLabelsArray addObject:labelBtn];
  206. lastLabelBtn = labelBtn;
  207. x = CGRectGetMaxX(labelBtn.frame) + inset;
  208. if (i != _allArray.count - 1) {
  209. JXLabelObject *lastLabelObj = _allArray[i + 1];
  210. CGSize lastSize = [lastLabelObj.groupName boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:16.0]} context:nil].size;
  211. lastSize = CGSizeMake(lastSize.width + 20, lastSize.height + 10);
  212. if ((x + lastSize.width + margin) > JX_SCREEN_WIDTH) {
  213. x = margin;
  214. y = CGRectGetMaxY(labelBtn.frame) + 10;
  215. }
  216. }
  217. _allScrollView.frame = CGRectMake(_allScrollView.frame.origin.x, _allScrollView.frame.origin.y, _allScrollView.frame.size.width, CGRectGetMaxY(lastLabelBtn.frame) + margin+100);
  218. }
  219. }
  220. // 已有标签点击事件
  221. - (void)labelBtnAction:(UIButton *)labelBtn {
  222. labelBtn.selected = !labelBtn.selected;
  223. for (UIButton *btn in _labelsArray) {
  224. if (btn.tag != labelBtn.tag) {
  225. btn.selected = !labelBtn.selected;
  226. }
  227. }
  228. // 删除菜单
  229. [self becomeFirstResponder];
  230. UIMenuController *menuController = [UIMenuController sharedMenuController];
  231. [menuController setTargetRect:labelBtn.frame inView:labelBtn.superview];
  232. UIMenuItem *delete = [[UIMenuItem alloc] initWithTitle:Localized(@"JX_Delete") action:@selector(deleteAction)];
  233. menuController.menuItems = @[delete];
  234. // [menuController setMenuVisible:YES animated:YES];
  235. menuController.menuVisible = YES;
  236. }
  237. - (BOOL)canBecomeFirstResponder
  238. {
  239. return YES;
  240. }
  241. - (BOOL)canPerformAction:(SEL)action
  242. withSender:(id)sender
  243. {
  244. if (action == @selector(deleteAction))
  245. return YES;
  246. else
  247. return NO;
  248. }
  249. // 删除菜单隐藏通知,取消选中
  250. - (void)menuControllerWillHide {
  251. for (UIButton *btn in _labelsArray) {
  252. btn.selected = NO;
  253. }
  254. }
  255. // 删除菜单点击事件
  256. - (void)deleteAction {
  257. NSInteger index = -1;
  258. for (NSInteger i = 0; i < _labelsArray.count; i ++) {
  259. UIButton *btn = _labelsArray[i];
  260. if (btn.selected) {
  261. index = i;
  262. BOOL flag = NO;
  263. for (UIButton *allBtn in _allLabelsArray) {
  264. if ([btn.titleLabel.text isEqualToString:allBtn.titleLabel.text]) {
  265. flag = YES;
  266. // 所有标签存在将要删除的标签
  267. [self allLabelAction:allBtn];
  268. break;
  269. }
  270. }
  271. // 所有标签中没有将要删除的标签
  272. if (!flag) {
  273. if (index >= 0) {
  274. [_array removeObjectAtIndex:index];
  275. [_labelsArray removeObjectAtIndex:index];
  276. [self createLabels];
  277. }
  278. }
  279. break;
  280. }
  281. }
  282. }
  283. // 所有标签点击事件
  284. - (void)allLabelAction:(UIButton *)labelBtn {
  285. labelBtn.selected = !labelBtn.selected;
  286. if (labelBtn.selected) {
  287. labelBtn.layer.borderColor = THEMECOLOR.CGColor;
  288. }else {
  289. labelBtn.layer.borderColor = HEXCOLOR(0xdcdcdc).CGColor;
  290. }
  291. JXLabelObject *allObj = _allArray[labelBtn.tag];
  292. JXLabelObject *obj = nil;
  293. // 查找已选标签中是否有此标签
  294. for (JXLabelObject *labelObj in _array) {
  295. if ([allObj.groupName isEqualToString:labelObj.groupName]) {
  296. obj = labelObj;
  297. break;
  298. }
  299. }
  300. NSMutableArray *userIdArr = [NSMutableArray arrayWithArray: [allObj.userIdList componentsSeparatedByString:@","]];
  301. if (allObj.userIdList.length <= 0) {
  302. userIdArr = [NSMutableArray array];
  303. }
  304. NSString *userId;
  305. for (NSString *str in userIdArr) {
  306. if ([str isEqualToString:self.user.userId]) {
  307. userId = str;
  308. break;
  309. }
  310. }
  311. if (obj) {
  312. // 如果已选标签有此标签,删除已选标签
  313. [_array removeObject:obj];
  314. if (userId) {
  315. [userIdArr removeObject:userId];
  316. }
  317. }else {
  318. // 如果没有,添加此标签
  319. [_array addObject:allObj];
  320. if (!userId) {
  321. [userIdArr addObject:self.user.userId];
  322. }
  323. }
  324. NSMutableString *userIdListStr = [NSMutableString string];
  325. for (NSInteger i = 0; i < userIdArr.count; i ++) {
  326. NSString *userId = userIdArr[i];
  327. if (i == 0) {
  328. [userIdListStr appendFormat:@"%@", userId];
  329. }else {
  330. [userIdListStr appendFormat:@",%@", userId];
  331. }
  332. }
  333. // 更改所有标签的userList
  334. allObj.userIdList = userIdListStr;
  335. [self createLabels];
  336. }
  337. // 输入框回调
  338. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  339. // 点击键盘完成
  340. if ([string isEqualToString:@"\n"]) {
  341. if (textField.text.length > 0) {
  342. // 查重、如果已选标签中已存在此标签,不重复添加
  343. for (UIButton *labelBtn in _labelsArray) {
  344. if ([labelBtn.titleLabel.text isEqualToString:textField.text]) {
  345. _textField.text = nil;
  346. return YES;
  347. }
  348. }
  349. // 查重、如果所有标签中已存在此标签
  350. for (UIButton *allLabelBtn in _allLabelsArray) {
  351. if ([allLabelBtn.titleLabel.text isEqualToString:textField.text]) {
  352. // 如果所有标签此标签未选中,自动选中此标签
  353. if (!allLabelBtn.selected) {
  354. [self allLabelAction:allLabelBtn];
  355. }
  356. // 如果已选中,不做操作
  357. _textField.text = nil;
  358. return YES;
  359. }
  360. }
  361. // 添加输入的标签
  362. JXLabelObject *labelObj = [[JXLabelObject alloc] init];
  363. labelObj.groupName = textField.text;
  364. [_array addObject:labelObj];
  365. [self createLabels];
  366. _textField.text = nil;
  367. return YES;
  368. }
  369. }
  370. // 删除
  371. if (string.length <= 0 && textField.text.length <= 0) {
  372. UIButton *lastBtn = _labelsArray.lastObject;
  373. if (lastBtn.selected) { // 如果已选标签最后一个标签已选中
  374. NSInteger index = -1;
  375. for (NSInteger i = 0; i < _labelsArray.count; i ++) {
  376. UIButton *btn = _labelsArray[i];
  377. if (btn.selected) {
  378. index = i;
  379. BOOL flag = NO;
  380. for (UIButton *allBtn in _allLabelsArray) {
  381. if ([btn.titleLabel.text isEqualToString:allBtn.titleLabel.text]) {
  382. flag = YES;
  383. // 如果所有标签中有此标签
  384. [self allLabelAction:allBtn];
  385. break;
  386. }
  387. }
  388. if (!flag) { // 如果所有标签中没有此标签直接删除
  389. if (index >= 0) {
  390. [_array removeObjectAtIndex:index];
  391. [_labelsArray removeObjectAtIndex:index];
  392. [self createLabels];
  393. }
  394. }
  395. break;
  396. }
  397. }
  398. }else { // 如果没有选中, 第一次点击删除 选中最后一个标签
  399. lastBtn.selected = YES;
  400. }
  401. }
  402. return YES;
  403. }
  404. // 确定按钮
  405. - (void)onSave {
  406. if (self.textField.text.length > 0) {
  407. // 查重、如果已选标签中已存在此标签,不重复添加
  408. for (UIButton *labelBtn in _labelsArray) {
  409. if ([labelBtn.titleLabel.text isEqualToString:self.textField.text]) {
  410. _textField.text = nil;
  411. return;
  412. }
  413. }
  414. // 查重、如果所有标签中已存在此标签
  415. for (UIButton *allLabelBtn in _allLabelsArray) {
  416. if ([allLabelBtn.titleLabel.text isEqualToString:self.textField.text]) {
  417. // 如果所有标签此标签未选中,自动选中此标签
  418. if (!allLabelBtn.selected) {
  419. [self allLabelAction:allLabelBtn];
  420. }
  421. // 如果已选中,不做操作
  422. _textField.text = nil;
  423. return;
  424. }
  425. }
  426. // 添加输入的标签
  427. JXLabelObject *labelObj = [[JXLabelObject alloc] init];
  428. labelObj.groupName = self.textField.text;
  429. [_array addObject:labelObj];
  430. [self createLabels];
  431. _textField.text = nil;
  432. return;
  433. }
  434. BOOL flag = NO;
  435. for (NSInteger i = 0; i < _array.count; i ++) {
  436. JXLabelObject *labelObj = _array[i];
  437. // 添加输入框输入的新创建的标签
  438. if (!labelObj.groupId) {
  439. flag = YES;
  440. [g_server friendGroupAdd:labelObj.groupName toView:self];
  441. }
  442. }
  443. // 没有新创建的标签,直接更新已存在标签
  444. if (!flag) {
  445. NSMutableString *userIdListStr = [NSMutableString string];
  446. for (NSInteger i = 0; i < _array.count; i ++) {
  447. JXLabelObject *obj = _array[i];
  448. if (i == 0) {
  449. [userIdListStr appendFormat:@"%@", obj.groupId];
  450. }else {
  451. [userIdListStr appendFormat:@",%@", obj.groupId];
  452. }
  453. }
  454. [g_server friendGroupUpdateFriendToUserId:self.user.userId groupIdStr:userIdListStr toView:self];
  455. }
  456. if ([self.delegate respondsToSelector:self.didSelect]) {
  457. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:NO];
  458. }
  459. [self actionQuit];
  460. }
  461. //服务器返回数据
  462. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  463. [_wait stop];
  464. if ([aDownload.action isEqualToString:act_FriendGroupAdd]) {
  465. NSMutableString *userIdListStr = [NSMutableString stringWithFormat:@"%@", self.user.userId];
  466. // 添加新标签后更新标签的用户列表
  467. [g_server friendGroupUpdateGroupUserList:dict[@"groupId"] userIdListStr:userIdListStr toView:self];
  468. JXLabelObject *label = [[JXLabelObject alloc] init];
  469. if (dict) {
  470. label.userId = dict[@"userId"];
  471. label.groupId = dict[@"groupId"];
  472. label.groupName = dict[@"groupName"];
  473. }
  474. label.userIdList = userIdListStr;
  475. // 插入新创建的标签
  476. [label insert];
  477. JXLabelObject *lastObj;
  478. // 查找到新创建的标签的最后一个
  479. for (NSInteger i = _array.count - 1; i >= 0; i --) {
  480. JXLabelObject *obj = _array[i];
  481. if (!obj.groupId) {
  482. lastObj = obj;
  483. break;
  484. }
  485. }
  486. // 更新新创建的标签的其他字段
  487. for (JXLabelObject *labelObj in _array) {
  488. if ([label.groupName isEqualToString:labelObj.groupName]) {
  489. labelObj.groupId = label.groupId;
  490. labelObj.userId = label.userId;
  491. labelObj.userIdList = label.userIdList;
  492. break;
  493. }
  494. }
  495. // 如果接口已成功添加完最后一条标签后,再更新用户的标签列表
  496. if ([label.groupName isEqualToString:lastObj.groupName]) {
  497. NSMutableString *userIdListStr = [NSMutableString string];
  498. for (NSInteger i = 0; i < _array.count; i ++) {
  499. JXLabelObject *obj = _array[i];
  500. if (i == 0) {
  501. [userIdListStr appendFormat:@"[%@", obj.groupId];
  502. }else if (i == self.array.count - 1) {
  503. [userIdListStr appendFormat:@",%@]", obj.groupId];
  504. }else {
  505. [userIdListStr appendFormat:@",%@", obj.groupId];
  506. }
  507. }
  508. [g_server friendGroupUpdateFriendToUserId:self.user.userId groupIdStr:userIdListStr toView:self];
  509. }
  510. }
  511. if ([aDownload.action isEqualToString:act_FriendGroupUpdateFriend]) {
  512. // 更新数据库
  513. for (JXLabelObject *labelObj in _allArray) {
  514. [labelObj update];
  515. }
  516. self.user.remarkName = _name.text;
  517. if (_detail.textColor != self.textVColor) {
  518. self.user.describe = _detail.text;
  519. }else {
  520. self.user.describe = nil;
  521. }
  522. if ([self.delegate respondsToSelector:self.didSelect]) {
  523. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:NO];
  524. }
  525. // [self actionQuit];
  526. }
  527. }
  528. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  529. [_wait hide];
  530. return show_error;
  531. }
  532. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  533. [_wait hide];
  534. return show_error;
  535. }
  536. -(void) didServerConnectStart:(JXConnection*)aDownload{
  537. [_wait start];
  538. }
  539. -(UITextView*)createTextField:(UIView*)parent default:(NSString*)s {
  540. UITextView* p = [[UITextView alloc] init];
  541. p.delegate = self;
  542. p.autocorrectionType = UITextAutocorrectionTypeNo;
  543. p.autocapitalizationType = UITextAutocapitalizationTypeNone;
  544. p.enablesReturnKeyAutomatically = YES;
  545. p.scrollEnabled = NO;
  546. p.returnKeyType = UIReturnKeyDone;
  547. p.showsVerticalScrollIndicator = NO;
  548. p.showsHorizontalScrollIndicator = NO;
  549. p.textAlignment = NSTextAlignmentLeft;
  550. p.userInteractionEnabled = YES;
  551. p.backgroundColor = [UIColor whiteColor];
  552. p.text = s;
  553. p.font = g_factory.font15;
  554. [parent addSubview:p];
  555. return p;
  556. }
  557. - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  558. [self.view endEditing:YES];
  559. }
  560. @end