EnumSelectViewController.m 20 KB

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