NewsViewController.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. //
  2. // NewsViewController.m
  3. // Apex Mobile
  4. //
  5. // Created by Ray on 14-4-18.
  6. // Copyright (c) 2014年 United Software Applications, Inc. All rights reserved.
  7. //
  8. #import "NewsViewController.h"
  9. #import "NewsDetailViewController.h"
  10. #import "JLRefreshFooter.h"
  11. @interface NewsViewController ()<JLRefreshDelegate>
  12. @end
  13. @implementation NewsViewController
  14. - (BOOL)shouldAutorotate
  15. {
  16. return YES;
  17. }
  18. - (UIInterfaceOrientationMask)supportedInterfaceOrientations
  19. {
  20. return UIInterfaceOrientationMaskPortrait;
  21. }
  22. - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
  23. {
  24. return UIInterfaceOrientationPortrait;
  25. }
  26. /**
  27. * 0: init load
  28. * 1: refresh
  29. * 2: load more
  30. */
  31. - (void)loadContentWithOption:(int)option Complete:(void (^)(int result))finish {
  32. self.mum.hidden = NO;
  33. // [self.params setValue:[NSString stringWithFormat:@"%ld",self.offset] forKey:@"offset"];
  34. self.mum.center = self.view.center;
  35. self.btnrefresh.enabled = false;
  36. //
  37. // NSTimeInterval animationDuration = 0.30f;
  38. // [UIView beginAnimations:@"ResizeView" context:nil];
  39. // [UIView setAnimationDuration:animationDuration];
  40. // self.prepageButton.enabled=false;
  41. // self.nextpageButton.enabled=false;
  42. // self.mum.hidden = false;
  43. // self.grid.hidden = true;
  44. // self.mum.hidden = false;
  45. // self.tableview.hidden = true;
  46. // [UIView commitAnimations];
  47. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  48. NSData* data=nil;
  49. if([self.module_name isEqualToString:@"Announcements"])
  50. data=[RANetwork get_announcements:self.lastid limit:self.limit];
  51. else
  52. data=[RANetwork get_marketnews:self.lastid limit:self.limit];
  53. dispatch_async(dispatch_get_main_queue(), ^{
  54. self.tableview.hidden =false;
  55. self.mum.hidden = true;
  56. if(data != nil)
  57. {
  58. [self.data appenddata: data];
  59. self.lastid = self.data._id;
  60. self.btnrefresh.hidden = false;
  61. if(self.data.finishload==true)
  62. {
  63. // int i =self.btnrefresh.state;
  64. self.btnrefresh.titleLabel.text =NSLocalizedString(@"no_more",nil);
  65. // [self.btnrefresh setTitle:@"No more" forState:UIControlStateNormal];
  66. }
  67. else
  68. {
  69. self.btnrefresh.enabled = true;
  70. self.btnrefresh.titleLabel.text =NSLocalizedString(@"load_more",nil);
  71. // [self.btnrefresh setTitle:@"Load more" forState:UIControlStateNormal];
  72. }
  73. [self.tableview reloadData ];
  74. if (finish) {
  75. finish(2);
  76. }
  77. }
  78. else
  79. {
  80. self.btnrefresh.enabled = true;
  81. [self.btnrefresh setTitle:@"Load more" forState:UIControlStateNormal];
  82. if (finish) {
  83. finish(0);
  84. }
  85. }
  86. });
  87. });
  88. }
  89. -(void) loadpage
  90. {
  91. [self loadContentWithOption:0 Complete:^(int result) {
  92. }];
  93. }
  94. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  95. {
  96. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  97. if (self) {
  98. self.data = [[NewsData alloc]init];
  99. // Custom initialization
  100. }
  101. return self;
  102. }
  103. -(id) init :(NSString*) module_name
  104. {
  105. self = [super init];
  106. if(self)
  107. {
  108. self.module_name = module_name;
  109. self.data = [[NewsData alloc]init];
  110. }
  111. return self;
  112. }
  113. - (void)viewDidLoad
  114. {
  115. [super viewDidLoad];
  116. self.navigationItem.title = self.module_name;
  117. self.limit = 10;
  118. self.data = [[NewsData alloc] init:self.limit];
  119. if (@available(iOS 11,*)) {
  120. self.tableview.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
  121. } else {
  122. self.automaticallyAdjustsScrollViewInsets = NO;
  123. }
  124. // self.btnrefresh = [UIButton buttonWithType:UIButtonTypeCustom];
  125. // // self.btnrefresh.titleLabel.text =@"Load more";
  126. //
  127. // [self.btnrefresh setTitle:@"Load more" forState:UIControlStateNormal];
  128. // self.btnrefresh.titleLabel.adjustsFontSizeToFitWidth = YES;
  129. //// [self.btnrefresh.titleLabel sizeToFit];
  130. // self.btnrefresh.hidden = true;
  131. // [self.btnrefresh setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  132. // self.btnrefresh.backgroundColor = [UIColor lightGrayColor];
  133. // [self.btnrefresh addTarget:self action:@selector(loadmore) forControlEvents:UIControlEventTouchUpInside];
  134. // self.btnrefresh.frame =CGRectMake(0.0f, 0.0f, self.tableview.bounds.size.width, 44.0f);
  135. // self.tableview.tableFooterView = self.btnrefresh;//tableFooterView;
  136. JLRefreshFooter *footer = [[JLRefreshFooter alloc] init];
  137. footer.refreshDelegate = self;
  138. self.tableview.jl_footer = footer;
  139. self.tableview.tableFooterView = [UIView new];
  140. [self loadpage];
  141. }
  142. - (void)loadmore
  143. {
  144. self.btnrefresh.enabled = NO;
  145. self.btnrefresh.titleLabel.text =@"Loading...";
  146. // [self.btnrefresh setTitle:@"Loading..." forState:UIControlStateNormal];
  147. [self loadpage];
  148. // [SVProgressHUD showWithStatus:@"加载中..."];
  149. // [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  150. // double delayInSeconds = 1.5;
  151. // dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
  152. // dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  153. // _rowCount += 5;
  154. // [self.tableView reloadData];
  155. // [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  156. // [SVProgressHUD showSuccessWithStatus:@"加载完成"];
  157. // _bottomRefresh.frame = CGRectMake(0, 44+_rowCount*RCellHeight, 320, RCellHeight);
  158. // _bottomRefresh.enabled = YES;
  159. // });
  160. }
  161. - (void)didReceiveMemoryWarning
  162. {
  163. [super didReceiveMemoryWarning];
  164. // Dispose of any resources that can be recreated.
  165. }
  166. /*
  167. #pragma mark - Navigation
  168. // In a storyboard-based application, you will often want to do a little preparation before navigation
  169. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  170. {
  171. // Get the new view controller using [segue destinationViewController].
  172. // Pass the selected object to the new view controller.
  173. }
  174. */
  175. //- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
  176. //{
  177. //// if(section==1)
  178. //// return 44;
  179. //// else
  180. // return 200;
  181. //}
  182. //- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
  183. //{
  184. //// tableView dequeueReusableHeaderFooterViewWithIdentifier:<#(NSString *)#>
  185. // UITableViewHeaderFooterView *view = [[UITableViewHeaderFooterView alloc]initWithFrame:CGRectMake(0, 0, 360, 44.0)];
  186. // view.backgroundColor = [UIColor redColor];
  187. //// UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 360, 44.0)];
  188. //// UIButton* btnNextPage = [[UIButton alloc] initWithFrame:footerView.frame];
  189. //// btnNextPage.titleLabel.text = NSLocalizedString(@"Load more", null);
  190. //// [footerView addSubview:btnNextPage];
  191. //// [view addSubview:footerView];
  192. // return view;
  193. //}
  194. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  195. {
  196. return 1;
  197. }
  198. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  199. {
  200. return [self.data get_count];
  201. }
  202. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  203. {
  204. DebugLog(@"cellForRowAtIndexPath");
  205. NSString *CellIdentifier = @"newsitem";
  206. NewsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
  207. NSString* title = [self.data.pagedata[indexPath.row] valueForKey:@"title"];
  208. NSString* content = [self.data.pagedata[indexPath.row] valueForKey:@"content"];
  209. NSString* base64img =[self.data.pagedata[indexPath.row] valueForKey:@"image"];
  210. if(base64img.length>0)
  211. {
  212. NSData *_decodedImageData = [[NSData alloc] initWithBase64EncodedString:base64img options:NSDataBase64DecodingIgnoreUnknownCharacters];
  213. cell.image.image = [UIImage imageWithData:_decodedImageData];
  214. cell.image.contentMode=UIViewContentModeScaleAspectFill;
  215. }
  216. else
  217. {
  218. NSString* default_icon =nil;
  219. if([self.module_name isEqualToString:@"Announcements"])
  220. {
  221. default_icon = @"mode_announcement";
  222. }
  223. else
  224. {
  225. default_icon = @"rect_market_news";
  226. }
  227. UIImage * img =[UIImage imageNamed:default_icon];
  228. cell.image.image = img;
  229. cell.image.contentMode=UIViewContentModeScaleAspectFit;
  230. }
  231. cell.title.text = title;
  232. [cell.title sizeToFit];
  233. cell.content.text =content;
  234. // cell.imageView.image = [UIImage imageNamed:[self.toolsinfo[indexPath.row] valueForKey:@"img"]];
  235. return cell;
  236. }
  237. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  238. {
  239. NewsDetailViewController *viewcontroller=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"NewsDetailViewController"];
  240. viewcontroller.title = [self.data.pagedata[indexPath.row] valueForKey:@"title"];;
  241. viewcontroller.url = [self.data.pagedata[indexPath.row] valueForKey:@"url"];;
  242. [self.navigationController pushViewController:viewcontroller animated:YES];
  243. // SearchViewController *searchViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"SearchViewController"];
  244. // searchViewController.function_name = @"Download Document";
  245. // [self.navigationController pushViewController:searchViewController animated:YES];
  246. // return;
  247. // NSString* title = [self.toolsinfo[indexPath.row] valueForKey:@"title"];
  248. // if([title isEqualToString:@"Market news"])
  249. // {
  250. // NewsViewController *newsview=[[NewsViewController alloc] init:title ];
  251. // [self.navigationController pushViewController:newsview animated:YES];
  252. // }
  253. // else if([title isEqualToString:@"Announcements"])
  254. // {
  255. // NewsViewController *newsview=[[NewsViewController alloc] init:title ];
  256. // [self.navigationController pushViewController:newsview animated:YES];
  257. // }
  258. }
  259. #pragma mark - Refresh Delegate
  260. - (void)jl_beginRefresh:(JLRefreshBasis *)refresh {
  261. if (refresh == self.tableview.jl_footer) {
  262. [self loadContentWithOption:2 Complete:^(int result) {
  263. if (self.data.finishload==true) {
  264. [(JLRefreshFooter *)self.tableview.jl_footer noMoreData];
  265. } else {
  266. [self.tableview.jl_footer endRefresh];
  267. }
  268. }];
  269. }
  270. }
  271. - (void)jl_pullRefresh:(JLRefreshBasis *)refresh state:(JLRefreshState)state percentage:(float)percentage {
  272. }
  273. - (void)jl_endRefresh:(JLRefreshBasis *)refresh {
  274. }
  275. @end