2014-10-30 22 views
0

我做了一个tableview与JSON数据它包含分页和每个Webservices页面包含10个数据,但我希望当表视图滚动然后我想加载每一次只有5项是如何可能的?请给我解决方案。如何在表视图滚动时仅加载五个单元格?

我的代码,这个

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
NSInteger currentOffset = scrollView.contentOffset.y; 
NSInteger maximumOffset = scrollView.contentSize.height- scrollView.frame.size.height; 
if (maximumOffset - currentOffset <= 0) 
{ 
pageNum = pageNum + 1; 
[self getData]; 
} 
} 
-(void)getData 
{ 
NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.truemanindiamagazine.com/webservice/news.php?page=%d",pageNum]]; 
dispatch_async(kBgQueue, ^{ 
    data = [NSData dataWithContentsOfURL:url]; 
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; 
}); 
} 

而且FetchData方法是

-(void)fetchedData:(NSData *)responsedata 
{ 
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
spinner.frame = CGRectMake(0, 0, 320, 44); 
self.newsTable.tableFooterView = spinner; 
if (responsedata.length > 0) 
{ 
    [spinner startAnimating]; 
    NSError* error; 
    self.json = [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error]; 
    if ([[_json objectForKey:@"data"] isKindOfClass:[NSArray class]]) 
    { 
     NSArray *arr = (NSArray *)[_json objectForKey:@"data"]; 
     [self.imageArray addObjectsFromArray:arr]; 
     [self.newsTable reloadData]; 
     NSLog(@"images,%@",self.imageArray); 
    } 
} 
[self.spinner stopAnimating]; 
self.spinner.hidesWhenStopped=YES; 
} 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

return self.imageArray.count; 
} 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
if (self.imageArray == nil || self.imageArray.count < 1) 
{ 
    return 0; 
} 
else 
{ 
    return 1; 
} 
[self.newsTable reloadData]; 
} 

我知道这是问了很多次,但我没有得到Answer.Please帮助我。

回答

0

请检查下面的代码

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    NSInteger currentOffset = scrollView.contentOffset.y; 
    NSInteger maximumOffset = scrollView.contentSize.height- scrollView.frame.size.height; 
    if (maximumOffset - currentOffset <= 0) 
    { 
     if([self.mTenarray count]==0) { 
      pageNum = pageNum + 1; 
      [self getData]; 
     } else { 
      [self.imageArray addObjectsFromArray:self.mTenarray]; 
      [self.mTenarray removeAllObjects]; 
      [self.newsTable reloadData]; 
     } 
    } 
} 
-(void)fetchedData:(NSData *)responsedata 
{ 
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    spinner.frame = CGRectMake(0, 0, 320, 44); 
    self.newsTable.tableFooterView = spinner; 
    if (responsedata.length > 0) 
    { 
     [spinner startAnimating]; 
     NSError* error; 
     self.json = [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error]; 
     if ([[_json objectForKey:@"data"] isKindOfClass:[NSArray class]]) 
     { 
      NSArray *arr = (NSArray *)[_json objectForKey:@"data"]; 
      [self.mTenarray addObjectsFromArray:arr]; 
      NSArray *mfivedatarray = [self.mTenarray subarrayWithRange:NSMakeRange(0, 5)]; 
      [self.imageArray addObjectsFromArray:mfivedatarray]; 
      self.mTenarray // remove first five objects 
      [self.newsTable reloadData]; 
      NSLog(@"images,%@",self.imageArray); 
     } 
    } 
    [self.spinner stopAnimating]; 
    self.spinner.hidesWhenStopped=YES; 
} 
+0

这条线的工作self.mTenarray //删除前五个对象?而不明白mTenArry是什么? – 2014-10-30 09:05:47

+0

你写的逻辑删除从该阵列中删除前五个对象。全局声明包含来自服务器的数据的tenarray – 2014-10-30 09:08:08

+0

解决您的问题。 – 2014-10-30 09:24:29

0

我们做到了我们的服务器上的方式是我们给API一个额外的“页面大小”参数,这样当你要求如数据:

http://www.truemanindiamagazine.com/webservice/news.php?page=3&pageSize=5 

它只返回5个结果,而不是默认金额,在您的情况下为10。这意味着我们不必在iOS的一方做任何奇特的过滤。

+0

但页面增加时,我的意思是当页面增加,Conatin 4到5页面呢? – 2014-10-30 09:10:53

+0

对不起,我不明白你的问题。当页面增加到第4页,第5页时,您仍然会从这些页面请求5个结果。如果默认情况下一组100个结果返回每个页面20个结果,那么这是5个页面,但是如果您只返回每个页面5个结果,那么您将有20个页面而不是5个。这就是您想问的问题? – Zhang 2014-10-30 11:53:20

+0

你说set page = 3&pageSize = 5,但是当我的Webservice数据在将来增加时,pageNumber是增量,那么什么是解决方案? – 2014-10-30 12:26:27

相关问题