EnumSelectViewController.m 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. //
  2. // CommonEditorEnumViewController.m
  3. // RedAnt ERP Mobile
  4. //
  5. // Created by Ray on 14-7-18.
  6. // Copyright (c) 2014年 United Software Applications, Inc. All rights reserved.
  7. //
  8. #import "EnumSelectViewController.h"
  9. #import "EnumSelectorCell.h"
  10. #import "RAUtils.h"
  11. #import "AppDelegate.h"
  12. #define DEF_CELL_HEIGHT 44
  13. //#define DEF_TABLE_HEIGHT 44
  14. //#define LINE_WIDTH 0
  15. //#define CELL_MARGIN 0
  16. #define LABEL_MARGIN 15
  17. @interface EnumSelectViewController ()
  18. @end
  19. @implementation EnumSelectViewController
  20. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  21. {
  22. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  23. if (self) {
  24. // Custom initialization
  25. }
  26. return self;
  27. }
  28. - (void)viewDidLoad
  29. {
  30. [super viewDidLoad];
  31. // self.automaticallyAdjustsScrollViewInsets = NO;
  32. // self.max_select = 0;
  33. self.navi_item.title = self.title;
  34. // self.navigationItem.title = self.title;
  35. // Do any additional setup after loading the view.
  36. self.auto_close = true;
  37. if(self.is_dialog)
  38. {
  39. UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"close"] imageWithRenderingMode:UIImageRenderingModeAutomatic]
  40. style:UIBarButtonItemStylePlain
  41. target:self
  42. action:@selector( onCloseClick:)];
  43. // [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Close", nil) style:UIBarButtonItemStylePlain target:self action:@selector(onCloseClick:)];
  44. self.navi_item.rightBarButtonItem = closeButton;
  45. }
  46. else
  47. {
  48. UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAutomatic]
  49. style:UIBarButtonItemStylePlain
  50. target:self
  51. action:@selector( onBackClick:)];
  52. // [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", nil) style:UIBarButtonItemStylePlain target:self action:@selector(onBackClick:)];
  53. self.navigationItem.leftBarButtonItem = backButton;
  54. }
  55. self.dirty = false;
  56. NSString *model = [UIDevice currentDevice].model;
  57. if ([model isEqualToString:@"iPhone"]) {
  58. } else {
  59. UILabel* titleLabel= [[UILabel alloc] initWithFrame:CGRectMake(100, 0, 200
  60. , 44)];
  61. titleLabel.text=self.title;
  62. // titleLabel.backgroundColor =[UIColor yellowColor];
  63. titleLabel.textAlignment=NSTextAlignmentCenter;
  64. //将搜索条放在一个UIView上
  65. UIView *searchView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 1768, 44)];
  66. searchView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth;
  67. titleLabel.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
  68. titleLabel.center=searchView.center;
  69. UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(searchView.frame.size.width-200.0f-8.0f,0.0f,200.0f,44.0f)];
  70. searchBar.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
  71. searchBar.delegate = self;
  72. [searchBar setPlaceholder:@"filter"];
  73. //searchBar.barTintColor=[UIColor clearColor];
  74. searchBar.searchBarStyle=UISearchBarStyleMinimal;
  75. [searchView addSubview:titleLabel];
  76. [searchView addSubview:searchBar];
  77. self.navigationItem.titleView = searchView;
  78. }
  79. [[self navigationController] setNavigationBarHidden:self.hide_navibar animated:NO];
  80. }
  81. - (void)onBackClick:(UIButton *)sender {
  82. [self.navigationController popViewControllerAnimated:(false)];
  83. // [self.navigationController dismissViewControllerAnimated:true completion:^{
  84. // ;
  85. // }];
  86. }
  87. - (void)onCloseClick:(UIButton *)sender {
  88. [self dismissViewControllerAnimated:YES
  89. completion:^{
  90. }];
  91. }
  92. - (void)viewWillDisappear:(BOOL)animated
  93. {
  94. [super viewWillDisappear:animated];
  95. if(self.dirty == false)
  96. return;
  97. if (self.delegate && [self.delegate respondsToSelector:@selector(EnumValueChanged:indexPath:)]) {
  98. [self.delegate EnumValueChanged:self.cadedate indexPath:self.updatePosition];
  99. }
  100. if(self.returnValue)
  101. self.returnValue(self.cadedate);
  102. }
  103. - (void)didReceiveMemoryWarning
  104. {
  105. [super didReceiveMemoryWarning];
  106. // Dispose of any resources that can be recreated.
  107. }
  108. //-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
  109. //{
  110. //
  111. // [self.tableEnum reloadData];
  112. ////
  113. //// UIApplication * app = [UIApplication sharedApplication];
  114. //// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
  115. //// [appDelegate didRotated];
  116. //
  117. //
  118. //
  119. //}
  120. - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  121. [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
  122. [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
  123. // what ever you want to prepare
  124. } completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
  125. [self.tableEnum reloadData];
  126. }];
  127. }
  128. #pragma mark - Table view data source
  129. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  130. {
  131. return 1;
  132. }
  133. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  134. {
  135. // if(self.canbeEmpty)
  136. // return [[self.cadedate valueForKey:@"count"] intValue]+1;
  137. // else
  138. if(self.keywords==nil || self.keywords.length==0)
  139. {
  140. self.filter_count = 0;
  141. return [[self.cadedate valueForKey:@"count"] intValue];
  142. }
  143. else
  144. {
  145. int count = 0;
  146. for (int i=0; i<[[self.cadedate valueForKey:@"count"] intValue]; i++)
  147. {
  148. NSDictionary* val_json = [self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",i ]];
  149. NSString* value = [val_json valueForKey:@"value"];
  150. NSUInteger location=[[value uppercaseString] rangeOfString:self.keywords].location;
  151. if(location!= NSNotFound)
  152. count++;
  153. }
  154. self.filter_count = count;
  155. return count;
  156. }
  157. }
  158. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
  159. {
  160. NSDictionary* val_json =nil;
  161. if(self.keywords==nil || self.keywords.length==0)
  162. {
  163. val_json=[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%ld",(long)indexPath.row ]];
  164. }
  165. else
  166. {
  167. int count = 0;
  168. for (int i=0; i<[[self.cadedate valueForKey:@"count"] intValue]; i++)
  169. {
  170. if(count>= self.filter_count)
  171. break;
  172. NSDictionary* search_json = [self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",i ]];
  173. NSString* value = [search_json valueForKey:@"value"];
  174. NSUInteger location=[[value uppercaseString] rangeOfString:self.keywords].location;
  175. if(location!= NSNotFound)
  176. count++;
  177. if(count-1==indexPath.row)
  178. val_json=search_json;
  179. }
  180. }
  181. NSString* value = [val_json valueForKey:@"value"];
  182. float width = tableView.frame.size.width;
  183. width-=40;
  184. CGSize constraintkey = CGSizeMake(width-2*LABEL_MARGIN, 10.0f);//key label width is 40% cell width;
  185. // CGSize constraintval = CGSizeMake(width*0.6-2*LABEL_MARGIN, 20000.0f);//val label width is 60% cell width;
  186. // NSDictionary* item = [self.content get_item_seg:indexPath.section row:indexPath.row];
  187. // NSString* key =[self.content_data valueForKey:@"order_info"];
  188. // [cell.keyLabel sizeToFit];
  189. // NSString* val=[item_json valueForKey:@"val"] ;
  190. // if([val isEqual:[NSNull null]])
  191. // val=@"";
  192. // if(val==nil)
  193. // val=@"";
  194. // if([val isEqualToString:@"null"])
  195. // val=@"";
  196. CGRect frame;
  197. frame.size = constraintkey;
  198. frame.origin.x=0;
  199. frame.origin.y=0;
  200. RTLabel* rtlabel = [[RTLabel alloc] initWithFrame:frame];
  201. // rtlabel.lineSpacing = 10;
  202. // [rtlabel setLineBreakMode: RTTextLineBreakModeWordWrapping];
  203. // rtlabel.lineSpacing = 20.0;
  204. [rtlabel setText: value];
  205. CGSize optimumSize = [rtlabel optimumSize];
  206. // DebugLog(@"%@",key);
  207. // [rtlabel sizeThatFits:constraintkey];
  208. // rtlabel frameHeight:<#(CTFrameRef)#>
  209. // rtlabel
  210. // [rtlabel sizeToFit];
  211. //CGSize newsize= rtlabel.frame.size;
  212. // CGSize sizeval=rtlabel.optimumSize;
  213. // CGSize sizekey = [key sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintkey lineBreakMode:NSLineBreakByWordWrapping];
  214. // CGSize sizeval = [val sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintval lineBreakMode:NSLineBreakByWordWrapping];
  215. float height = optimumSize.height;
  216. height = MAX(height+2*LABEL_MARGIN, DEF_CELL_HEIGHT);
  217. return height;
  218. }
  219. //- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  220. //{
  221. // return UITableViewCellEditingStyleNone;
  222. //}
  223. //- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  224. //{
  225. // //如果两次点击的时间间隔小于1秒,则断定为双击事件
  226. //
  227. // if(tableView.editing==false)
  228. // return;
  229. //
  230. //
  231. // if([tableView numberOfRowsInSection:indexPath.section]<=1)
  232. // return;
  233. // // int between = 1;
  234. // NSUInteger curr = [[NSDate date] timeIntervalSince1970];
  235. //
  236. // if(indexPath.row==self.lasttap.row&&indexPath.section==self.lasttap.section)
  237. // {
  238. // if (curr-self.taptime<1) {
  239. // DebugLog(@"double click!");
  240. // self.lasttap =nil;
  241. //
  242. // NSMutableArray * from;
  243. // NSMutableArray * to ;
  244. // int section;
  245. // if(indexPath.section==0)
  246. // {
  247. // from = self.displayfields;
  248. // to = self.hidefields;
  249. // section = 1;
  250. // }
  251. // else
  252. // {
  253. //
  254. // from = self.hidefields;
  255. // to = self.displayfields;
  256. // section = 0;
  257. // }
  258. // NSIndexPath * toIndexPath = [NSIndexPath indexPathForRow:0 inSection:section];
  259. // // NSIndexPath * headerIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
  260. // // NSIndexPath * headerIndexPath1 = toIndexPath;
  261. //
  262. // id content=from[indexPath.row];
  263. // [tableView beginUpdates];
  264. // [from removeObjectAtIndex:indexPath.row];
  265. // [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  266. //
  267. // [to insertObject:content atIndex:0];
  268. // [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:toIndexPath] withRowAnimation:UITableViewRowAnimationFade];
  269. // [tableView endUpdates];
  270. //
  271. // // [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:headerIndexPath] withRowAnimation:UITableViewRowAnimationFade];
  272. // // [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:headerIndexPath1] withRowAnimation:UITableViewRowAnimationFade];
  273. // [tableView reloadData];
  274. //
  275. //
  276. // }
  277. // self.taptime = curr;
  278. //
  279. //
  280. // }
  281. // else
  282. // {
  283. // self.taptime = curr;
  284. // self.lasttap = indexPath;
  285. // }
  286. //}
  287. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  288. {
  289. NSDictionary* val_json =nil;
  290. if(self.keywords==nil || self.keywords.length==0)
  291. {
  292. val_json=[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%ld",(long)indexPath.row ]];
  293. }
  294. else
  295. {
  296. int count = 0;
  297. for (int i=0; i<[[self.cadedate valueForKey:@"count"] intValue]; i++)
  298. {
  299. if(count>= self.filter_count)
  300. break;
  301. NSDictionary* search_json = [self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",i ]];
  302. NSString* value = [search_json valueForKey:@"value"];
  303. NSUInteger location=[[value uppercaseString] rangeOfString:self.keywords].location;
  304. if(location!= NSNotFound)
  305. count++;
  306. if(count-1==indexPath.row)
  307. {
  308. val_json=search_json;
  309. break;
  310. }
  311. }
  312. }
  313. NSString* CellIdentifier = @"EnumSelectorCell";
  314. EnumSelectorCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
  315. // NSDictionary* val_json = [self.cadedate objectForKey:[NSString stringWithFormat:@"val_%ld",(long)indexPath.row ]];
  316. NSString* value = [val_json valueForKey:@"value"];
  317. // cell.rtLabel.lineSpacing=10;
  318. cell.rtLabel.text = value;
  319. // cell.labelValue.text = value;
  320. int check = [[val_json valueForKey:@"check" ] intValue];
  321. if(check==1)
  322. {
  323. // cell.img_checkmark.hidden=false;
  324. cell.accessoryType = UITableViewCellAccessoryCheckmark;
  325. }
  326. else
  327. {
  328. cell.accessoryType = UITableViewCellAccessoryNone;
  329. // cell.img_checkmark.hidden=true;
  330. }
  331. return cell;
  332. }
  333. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  334. {
  335. EnumSelectorCell* cell = (EnumSelectorCell*)[tableView cellForRowAtIndexPath:indexPath];
  336. cell.selected = false;
  337. self.dirty = true;
  338. if(self.single_select)
  339. {
  340. if(self.keywords==nil || self.keywords.length==0)
  341. {
  342. for(int i=0;i<[[self.cadedate valueForKey:@"count"] intValue];i++)
  343. {
  344. NSMutableDictionary* val_json = [[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",i]] mutableCopy];
  345. if(i==indexPath.row)
  346. {
  347. if ([[val_json[@"check"] stringValue] isEqual:@"1"])
  348. {
  349. //选中当前选中项时,不设脏状态
  350. self.dirty=false;
  351. }
  352. [val_json setValue:@"1" forKey:@"check"];
  353. }
  354. else
  355. [val_json setValue:@"0" forKey:@"check"];
  356. [self.cadedate setObject:val_json forKey:[NSString stringWithFormat:@"val_%d",i]];
  357. }
  358. }
  359. else
  360. {
  361. NSMutableDictionary* val_json =nil;
  362. int count = 0;
  363. for (int cc=0; cc<[[self.cadedate valueForKey:@"count"] intValue]; cc++)
  364. {
  365. if(count>= self.filter_count)
  366. break;
  367. NSMutableDictionary* search_json = [[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",cc ]] mutableCopy];
  368. NSString* value = [search_json valueForKey:@"value"];
  369. NSUInteger location=[[value uppercaseString] rangeOfString:self.keywords].location;
  370. if(location!= NSNotFound)
  371. count++;
  372. if(count-1==indexPath.row)
  373. val_json=search_json;
  374. }
  375. for (int sc=0;sc<[[self.cadedate valueForKey:@"count"] intValue];sc++)
  376. {
  377. NSMutableDictionary* sc_json = [[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",sc ]] mutableCopy];
  378. if ([[sc_json valueForKey:@"value" ] isEqual:[val_json valueForKey:@"value"]] )
  379. [sc_json setValue:@"1" forKey:@"check"];
  380. else
  381. [sc_json setValue:@"0" forKey:@"check"];
  382. [self.cadedate setObject:sc_json forKey:[NSString stringWithFormat:@"val_%d",sc]];
  383. }
  384. }
  385. if(self.auto_close)
  386. {
  387. if(self.navigationController!=nil)
  388. [self.navigationController popViewControllerAnimated:YES];
  389. // [self.navigationController dismissViewControllerAnimated:YES
  390. // completion:^{
  391. //
  392. //
  393. // }];
  394. else
  395. [self dismissViewControllerAnimated:YES
  396. completion:^{
  397. }];
  398. }
  399. }
  400. else
  401. {
  402. NSMutableDictionary* val_json =nil;
  403. if(self.keywords==nil || self.keywords.length==0)
  404. {
  405. val_json=[[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%ld",(long)indexPath.row ]] mutableCopy];
  406. }
  407. else
  408. {
  409. int count = 0;
  410. for (int i=0; i<[[self.cadedate valueForKey:@"count"] intValue]; i++)
  411. {
  412. if(count>= self.filter_count)
  413. break;
  414. NSMutableDictionary* search_json = [[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",i ]] mutableCopy];
  415. NSString* value = [search_json valueForKey:@"value"];
  416. NSUInteger location=[[value uppercaseString] rangeOfString:self.keywords].location;
  417. if(location!= NSNotFound)
  418. count++;
  419. if(count-1==indexPath.row)
  420. val_json=search_json;
  421. }
  422. }
  423. // NSMutableDictionary* val_json = [[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%ld",(long)indexPath.row]] mutableCopy];
  424. int check = [[val_json valueForKey:@"check"] intValue];
  425. if(check==1)
  426. [val_json setValue:@"0" forKey:@"check"];
  427. else
  428. {
  429. if([self check_count]>=self.max_select && self.max_select>0)
  430. {
  431. // UIAlertView * alert = [[UIAlertView alloc] initWithTitle: message:[NSString stringWithFormat: delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
  432. // // UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Error!" message:@"User&Password can not be empty!" delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) , nil];
  433. // [alert show];
  434. [RAUtils message_alert:[NSString stringWithFormat:@"%d items at most for this field.",self.max_select ] title:@"Max count reached" controller:self];
  435. // [RAUtils alert_view:[NSString stringWithFormat:@"%d items at most for this field.",self.max_select ] title:@"Max count reached"];
  436. return;
  437. }
  438. [val_json setValue:@"1" forKey:@"check"];
  439. }
  440. [self.cadedate setObject:val_json forKey:[NSString stringWithFormat:@"val_%ld",(long)indexPath.row]];
  441. }
  442. [self.tableEnum reloadData];
  443. }
  444. -(int) check_count
  445. {
  446. int check_count=0;
  447. // int count = 0;
  448. for (int i=0; i<[[self.cadedate valueForKey:@"count"] intValue]; i++)
  449. {
  450. NSMutableDictionary* val_json = [[self.cadedate objectForKey:[NSString stringWithFormat:@"val_%d",i ]] mutableCopy];
  451. int check = [[val_json valueForKey:@"check"] intValue];
  452. if(check==1)
  453. check_count++;
  454. }
  455. return check_count;
  456. }
  457. #pragma mark - searchBar delegate;
  458. - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
  459. {
  460. self.keywords=[searchBar.text uppercaseString];
  461. [self.tableEnum reloadData];
  462. // self.offset = 0;
  463. // [self.content_data removeAllObjects];
  464. // [self loadpage];
  465. // DebugLog(@"search");
  466. }
  467. - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
  468. {
  469. if([searchText isEqualToString:@""] && !self.reset)
  470. {
  471. self.keywords=nil;
  472. [self.tableEnum reloadData];
  473. self.reset=true;
  474. }
  475. else
  476. self.reset = false;
  477. }
  478. /*
  479. #pragma mark - Navigation
  480. // In a storyboard-based application, you will often want to do a little preparation before navigation
  481. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  482. {
  483. // Get the new view controller using [segue destinationViewController].
  484. // Pass the selected object to the new view controller.
  485. }
  486. */
  487. @end