如何在表视图或集合视图中实现无限加载?

2024-04-24

我正在构建一个文章阅读应用程序。我从 JSON 链接获取数据,例如 uitableview 中的文章图像和标题。

我无法在 uitableview 中实现分页,假设我的 JSON 链接是 www.example.com&page=1 一次包含 10 篇文章,即 1-10。

当我连接 www.example.com&page=2 等 JSON 链接以获得 11-20 篇文章列表时。

我无法实现如何在滚动时加载 uitableview 中的数据并增加数据行数。

这是我的代码:

     int *x=1;
    int *inc=10;

    @interface ysTableViewController ()

    {
     Reachability *internetReachable;
     }
     @end

      @implementation ysTableViewController

    - (id)initWithStyle:(UITableViewStyle)style
  {
         self = [super initWithStyle:style];
        if (self) {
    // Custom initialization
        }
      return self;
   }

    - (void)viewDidLoad
    {
       [super viewDidLoad];
        [self checkInternetConnection];
       UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,10,0,20)];
       titleLabel.textColor = [UIColor blackColor];
       titleLabel.backgroundColor = [UIColor clearColor];
       titleLabel.text = @"Story";
     [self.navigationItem setTitleView:titleLabel];


         }

  - (void)scrollViewDidScroll:(UIScrollView *)aScrollView {

    CGPoint offset = aScrollView.contentOffset;

   CGRect bounds = aScrollView.bounds;

   CGSize size = aScrollView.contentSize;

    UIEdgeInsets inset = aScrollView.contentInset;

    float y = offset.y + bounds.size.height - inset.bottom;

   float h = size.height;

    float reload_distance = 10;

     if(y > h + reload_distance) {

      NSLog(@"load more rows");

       inc=inc+10;

      BOOL myBool = [self isNetworkAvailable];

       if (myBool)

    {

        @try {

            // for table cell seperator line color

            self.tableView.separatorColor = [UIColor colorWithRed:190/255.0 green:190/255.0 blue:190/255.0 alpha:1.0];

            // for displaying the previous screen lable with back button in details view controller

            UIBarButtonItem *backbutton1 = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:nil];

           [[self navigationItem] setBackBarButtonItem:backbutton1];

             _Title1 = [[NSMutableArray alloc] init];

            _Author1 = [[NSMutableArray alloc] init];

            _Images1 = [[NSMutableArray alloc] init];

            _Details1 = [[NSMutableArray alloc] init];

            _link1 = [[NSMutableArray alloc] init];

            _Date1 = [[NSMutableArray alloc] init];

             NSString *urlString=[NSString stringWithFormat:@“www.example.com&page=%d",x];

            NSLog(@"xxxxx===%d",x);

           NSURL *newUrl=[NSURL URLWithString:urlString];

             NSData* data = [NSData dataWithContentsOfURL:newUrl];

            NSArray *ys_avatars = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

             x++;

          if(ys_avatars){

            for (int j=0;j<ys_avatars.count;j++)

                {

                    [_Title1 addObject:ys_avatars[j][@"title"]];

                    [_Author1 addObject: ys_avatars[j][@"author"]];

                    [_Images1 addObject: ys_avatars[j][@"featured_img"]];

                    [_Details1 addObject:ys_avatars[j][@"content"]];

                    [_link1 addObject:ys_avatars[j][@"permalink"]];

                    NSString *newStr=[ys_avatars[j][@"date"] substringToIndex:[ys_avatars[j][@"date"] length]-3];

                    [_Date1 addObject:newStr];

                }        }

            else

            {

                NSLog(@"asd");

                  }    }

           @catch (NSException *exception) {

           }        

         }

      }

   }

       - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

      {

// Return the number of sections.

      return 1;

     }

      - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    {

// Return the number of rows in the section.

      return inc;

         }

          - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

       {

       static NSString *Cellidentifier1 = @"ysTableViewCell";

         ysTableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:Cellidentifier1 forIndexPath:indexPath];

          // Configure the cell...

        long row = [indexPath row];

         cell1.TitleLabel1.text = _Title1[row];

         cell1.AuthorLabel1.text = _Author1[row];

             NSString *yourStoryUrl = [_Images1[indexPath.row] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

      if(yourStoryUrl) {

            NSArray *subStringsUrl = [yourStoryUrl componentsSeparatedByString:@"/"];

         NSString *stripedName = [subStringsUrl lastObject];

         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *documentsDirectory = [paths objectAtIndex:0];

    //Local stored image file path

           NSString* filePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",stripedName]];

           if(filePath) {

            UIImage *image = [UIImage imageWithContentsOfFile:filePath];

             if(image) {

            // Now the image will have been loaded and decoded and is ready to rock for the main thread

                ysTableViewCell  *updateCell =(id)[tableView cellForRowAtIndexPath:indexPath];

                if(updateCell)

                    updateCell.ThumbImage1.image=image;

                cell1.ThumbImage1.image=image;

          } else {

            dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

            dispatch_async(taskQ, ^{

                NSURL *Imageurl = [NSURL URLWithString:yourStoryUrl];

                NSData *data =  [NSData dataWithContentsOfURL:Imageurl];

                UIImage *images1 = [[UIImage alloc] initWithData:data];

              NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

                NSString *documentsDirectory = [paths objectAtIndex:0];

                NSData *imageData = UIImagePNGRepresentation(images1);

                //_imagePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",stripedName]];



                // NSLog((@"pre writing to file"));

                if (![imageData writeToFile:filePath atomically:NO])

                {

                    NSLog((@"Failed to cache image data to disk"));

                }

                else

                {

                    NSLog((@"the cachedImagedPath is %@",filePath));

                }

                // Now the image will have been loaded and decoded and is ready to rock for the main thread

                dispatch_sync(dispatch_get_main_queue(), ^{

                    ysTableViewCell  *updateCell =(id)[tableView cellForRowAtIndexPath:indexPath];

                    if(updateCell)

                        updateCell.ThumbImage1.image=images1;

                    cell1.ThumbImage1.image=images1;

                });

                  });

        }



    } else {

        dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

        dispatch_async(taskQ, ^{

            NSURL *Imageurl = [NSURL URLWithString:yourStoryUrl];

            NSData *data =  [NSData dataWithContentsOfURL:Imageurl];

            UIImage *images1 = [[UIImage alloc] initWithData:data];

            //        NSString *myString = [Imageurl absoluteString];

            //        NSLog(@"%@",myString);

            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

            NSString *documentsDirectory = [paths objectAtIndex:0];



             NSData *imageData = UIImagePNGRepresentation(images1);

             _imagePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",stripedName]];



            // NSLog((@"pre writing to file"));

            if (![imageData writeToFile:_imagePath atomically:NO])

            {

                NSLog((@"Failed to cache image data to disk"));

            }

            else

            {

              //  NSLog((@"the cachedImagedPath is %@",_imagePath));

            }

         // Now the image will have been loaded and decoded and is ready to rock for the main thread

              dispatch_sync(dispatch_get_main_queue(), ^{

                 ysTableViewCell  *updateCell =(id)[tableView           cellForRowAtIndexPath:indexPath];

                if(updateCell)

                    updateCell.ThumbImage1.image=images1;

                cell1.ThumbImage1.image=images1;

            });

           });

    }

}

return cell1;

  }

这绝非易事。一般而言,您需要如下所示的代码。

请注意这个基本例程的四个截然不同的部分。

我从未找到解决此问题的有效“通用”包解决方案。

再次,请查看其中的“四个部分”:它们给出了您正在寻找的逻辑!

-(void)forTerm:(NSString *)term doPageAfter:(int)doingThisPage
  {

  doingThisPage = doingThisPage + 1;
  if ( doingThisPage > 20 ) return; // never, ever, ever forget that!! heh.

  [CLOUD search:term page:doingThisPage then:^(NSArray *thoseTenResults)
    {




    self.searchSpinner.hidden = YES;

    // (step 1) IF IT IS "PAGE 1", we need to re-kick-off the array...
    if ( doingThisPage == 1 )
      CLOUD.searchResultsRA = [[NSMutableArray alloc] init];




    // (step 2) go ahead and add on these results

    if ( doingThisPage == 1 )
      {
      [CLOUD.searchResultsRA addObjectsFromArray:thoseTenResults];
      [self.searchDisplay safelyReloadBouncyTable];
      }
    else
      {
      [self.searchDisplay.collectionView performBatchUpdates:^
        {
        NSUInteger oldSize = CLOUD.searchResultsRA.count;
        [CLOUD.searchResultsRA addObjectsFromArray:thoseTenResults];
        NSUInteger newSize = CLOUD.searchResultsRA.count;

        NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];
        for (NSUInteger i = oldSize; i < newSize; i++)
          [arrayWithIndexPaths
              addObject:[NSIndexPath indexPathForRow:i inSection:0]];

        [self.searchDisplay justSignal];
        [self.searchDisplay.collectionView
           insertItemsAtIndexPaths:arrayWithIndexPaths];
        }
        completion:nil];
      }




    // (step 3) indeed if it's the first page, do a drop-in for fun
    if ( doingThisPage == 1 ) [self.searchDisplay.view dropIn:nil];
    // (for a "new search" which is now being displayed, in your UX
    // there would be some sort of indication of that fact - do it here)




    // (step 4) IF there WERE results .. try another page!
    if ( thoseTenResults.count > 0 )
      [self forTerm:term doPageAfter:doingThisPage];
      // note we are calling this same routine, again!!!
    }
    ];
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在表视图或集合视图中实现无限加载? 的相关文章

  • 使用 urllib2 从 FlightRadar24 获取数据时出现问题

    我正在尝试使用下面的脚本从 FlightRadar24 获取数据 基于这个答案 https stackoverflow com a 526695 3904031来处理cookies 当我当前在浏览器中输入该 url 时 我会得到一个不错的长
  • iPhone,如何隐藏标签栏按钮?

    如何隐藏单个标签栏按钮 我已经搜索过 但什么也没找到 只找到了完整的栏 我已经取得了一些进展 但仍然遇到问题 此代码位于我的应用程序委托中 带有选项卡栏的出口 我在其中调用它viewDidLoad选项卡栏中显示的第一个视图的视图 void
  • CALayer 抗锯齿不如 UIView 抗锯齿

    我一直在尝试使用 CALayer 制作圆形绘图的动画 一切都运行良好 但问题是 绘制的圆不够抗锯齿 它的边界有点太粗糙 或者如果使用光栅化则模糊 抗锯齿已启用 还尝试过 边缘抗锯齿遮罩 kCALayerLeftEdge kCALayerRi
  • 在ScreenUpdates之后调用drawViewHierarchyInRect时iOS8缩放故障:YES

    我正在将一个项目从 iOS7 转换为 iOS8 该项目使用自定义转换 并且需要在加载完成后捕获模式afterScreenUpdates YES并看到整个屏幕放大一秒钟然后缩小 我还在 iOS 版 Flickr 应用程序的各个部分之间以及在
  • SpriteKit 碰撞检测中 SKSpriteNode 之间的间隙

    我已经尝试解决这个问题很长一段时间了 我有一个具有简单平台物理原理的游戏 其中玩家跌倒在一个方块上 这可以阻止他跌倒 这是可行的 但是玩家停止的位置和实际对象 精灵节点的位置之间存在明显的差距 这是一个屏幕截图 它应该是不言自明的 clas
  • 如何从通讯录 ios 以编程方式编辑电话号码值

    我正在尝试在 iOS 中以编程方式替换特定联系人的特定电话号码 获取联系人表单地址簿 我不知道为什么我无法保存新的电话号码并刷新地址簿以显示更改 我正在这样做 BOOL changeContactPhoneNumber NSString p
  • 如何在 JSFiddle 中链接外部 json 文件?

    我有一个很长的 json 文件country json name WORLD population 6916183000 name More developed regions population 1240935000 name Less
  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • 为什么微软在 .net 3.5 SP1 之前就废弃了 JavaScriptSerializer,而在 .net 3.5 SP1 之后又重新启用了 JavaScriptSerializer?

    JavaScriptSerializer 在 net 3 5 SP1 之后并没有过时 我应该使用 JavaScriptSerializer 还是之前推荐的 DataContractJsonSerializer 还有为什么它被淘汰了 我很乐意
  • ARC 可以与 Core Graphics 对象一起使用吗?

    我最近开始了一个使用自动引用计数 ARC 的新项目 当我分配 CALayer 的内容时 UIView view UIImage image view layer contents image CGImage 我收到一个错误 ARC 不允许将
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有没有办法检测 iOS 设备进入睡眠模式(屏幕变黑时)时的事件?

    我想检测两个事件 设备被锁定 解锁 设备进入睡眠状态并且屏幕变黑 我在这里实现的第一个目标是 有没有办法检查 iOS 设备是否锁定 解锁 https stackoverflow com questions 14229955 is there
  • 斯威夫特/iOS。从导航堆栈中删除一些视图控制器

    这是我想做的 但我不确定这是否是正确的方法 所以请给我建议如何去做 我有初始 VC 和导航 VC 我从中推送第一个 VC 从中推送第二个 VC 接下来我介绍 来自第二个 VC 的 NavigationController 第三个 VC 现在
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • 观察 UIDatePicker 的变化

    我注意到没有委托来观察 UIDatePicker 中的变化 有没有一种方法可以在不确认任何内容的情况下检测选择器中何时进行更改 例如它旋转并落在新数字上的那一刻 我希望能够检测到这一点 我考虑过关键值观察 但我不认为有一个属性会立即改变 您
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • WKWebView:无需 Javascript 即可缩放PageToFit 行为

    如何获得scalesPageToFit显示在 HTML 内容中的行为WKWebView 不使用 JavaScript 在我们的例子中需要禁用 JS 抱歉没有发布任何代码 但我不知道如何实现这一目标 我所知道的和我找到的所有解决方案都是基于J
  • 简单、安全的API认证系统

    我有一个简单的 REST JSON API 供其他网站 应用程序访问我网站的一些数据库 通过 PHP 网关 基本上该服务的工作原理如下 调用 example com fruit orange 服务器返回有关橙子的 JSON 信息 问题是 我
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 在java中创建一个XML树并将其转换为json对象

    我尝试创建也能够转换为 json 的树 但对于只有一个xpath 当我尝试实现多个 xpath 时 我无法获得所需的输出 这里我分享一下我的实现 private static Document addElemtbypath List

随机推荐

  • 自动增量不适用于具有复合键的实体类

    我希望我的复合键元素之一自动递增 并且我正在为实体类使用嵌入键 因此我无法使用生成值注释来解决问题 因为 GeneratedValue使用时注释被忽略 Embeddable or EmbeddedId 你不能使用 GeneratedValu
  • DC.js 到 React 的转换

    有 dc js 反应转换的示例吗 对折线图 表格和时间滑块 带画笔的条形图 感兴趣 任何帮助 将不胜感激 Thanks 这是将 DC js 转换为 React 的开始 使用的库的版本如下 package json dependencies
  • Visual Studio 调试器提示和技巧(适用于 C/C++ 项目)

    我对有关在 Visual Studio 调试器中调试 C C 项目的提示和技巧感兴趣 我最近发现 如果您有一个指向某种数据类型的指针 比如说 char ptr 那么您可以使用以下语法在监视窗口中将其视为数组 ptr 10 这将显示 ptr
  • 从安装项目重新启动系统

    我正在使用 Visual Studio 创建一个安装项目 我想在安装成功完成后重新启动系统 我想要一次的努力 我不想每次在将设置交付给客户之前使用任何外部工具 实用程序修改设置 我可以调整安装项目本身吗 我怎样才能做到这一点 您可以使用 O
  • MatSort 未定义 - Angular 5

    我正在尝试在我的角度应用程序中实现材质表 分页和过滤器工作正常 但我无法对表格进行排序 我对 MatSort 的引用是未定义的 我确实将其导入到 AppModule 中 import MatTableModule from angular
  • 安卓版本设置

    我希望我的 Xamarin Android 应用程序支持 API 级别 16 及更高级别 但我对 Visual Studio 的属性窗格中存在三种不同的版本设置感到困惑 属性的名称是 Compile using Android versio
  • (Windows Phone 10) 是否可以在 Windows Phone 10 中以编程方式编辑、添加新联系人?

    我想在 Windows Phone 10 中以编程方式实现功能编辑和添加联系人 是否可以 有相关样本吗 以下是用于创建联系人的代码片段 public async Task AddContact String FirstName String
  • 加盐哈希 - 为什么文献中将盐视为夏娃已知的盐?

    标题说明了一切 我不明白 为什么你不应该像密码一样保密你的盐 或者我误解了什么 盐被视为公开的主要是因为没有必要保密 盐的目的主要是使字典攻击变得更加困难 不太实用 在字典攻击中 攻击者对字典中的常用单词进行哈希处理 并 如果他是认真的 用
  • 什么时候适合使用关联类型而不是泛型类型?

    In 这个问题 https stackoverflow com q 32053402 155423 出现了一个问题 可以通过将使用泛型类型参数的尝试更改为关联类型来解决 这引发了一个问题 为什么关联类型在这里更合适 这让我想了解更多 The
  • 如何将文件从 S3 下载到 iPhone 应用程序?

    我是 iPhone 开发新手 我正在开发一个 iPhone 应用程序 需要打开存储在 Amazon S3 服务上的文件 如何将文件从 S3 下载到我的 iPhone 应用程序 我尝试过亚马逊的SDK 但他们似乎没有提供下载和保存文件的方法
  • PHP 输出缓冲回调产生空白屏幕

    这是代码 ob start array dispatcher outputCallback include file ob end flush function outputCallback string if ob get level 1
  • Nodejs Hapi - 如何启用跨源访问控制

    我正在使用 HapiJs Restful Web 服务并尝试启用 cors 以便任何来自不同域的客户端都可以使用我的服务 我在服务器连接对象中尝试了 cors true 但没有成功 你放在哪里cors true 你能添加一些代码吗 不知道你
  • 如何将 BYTE 数组转换为 char 数组以使用套接字 C++ 发送

    我有一些问题 我编写客户端服务器应用程序 其中使用 win 套接字发送和接收信息 在我的项目中需要发送BYTE数组到客户端 并在客户端上将此 char 数组转换为BYTE 我该如何创建它 请帮助我 因为send 函数只能发送char 谢谢
  • 替换精灵中的图像-iPhone的cocos2d游戏开发

    我想改变精灵图像 举例来说 mainSprite Sprite spriteWithFile redFile png self addChild mainSprite 在这里 Sprite 已经添加到图层中 我有可以访问它的 mainSpr
  • x86 实模式下的段大小

    我对实模式下段的大小有一个疑问 因为它们不能超过 64K 但可以小于那个 http support microsoft com kb 120069 我的问题是这些段大小和基地址是如何初始化的 就像保护模式下有 GDT 和 LDT 一样 实模
  • “发生了致命的 JavaScript 错误。您想发送错误报告吗?”在 phpmyadmin 上

    几天前 我按照网站上的教程将 phpMyAdmin 升级到最新版本 删除并替换 Xampp 中 phpMyAdmin 文件夹的所有内容 然后替换为最新版本 然后将旧版本config inc php再次 升级后 我经常收到错误消息和错误代码
  • 在不同的翻译单元中启动全局变量(涉及链接器)

    最近在复习C 这是我的问题 请参阅中的代码file1 cpp and file2 cpp 文件1 cpp int x1 1 int y1 x1 2 文件2 cpp include necessary headers extern int y
  • 如何使用spark-submit的--properties-file选项在IntelliJ IDEA中启动Spark应用程序?

    我正在启动一个使用 Scala 和 IntelliJ IDE 开发的 Spark 项目 我想知道如何设置 properties fileIntelliJ 配置中 Spark 的具体配置 我正在阅读这样的配置 param1 gt sc get
  • 通过其他结构体成员的偏移指针访问结构体成员是否合法?

    在这两个示例中 通过偏移其他成员的指针来访问结构体成员是否会导致未定义 未指定 实现定义的行为 struct int a int b foo1 0 0 foo1 a 1 1 printf d foo1 b struct int arr 1
  • 如何在表视图或集合视图中实现无限加载?

    我正在构建一个文章阅读应用程序 我从 JSON 链接获取数据 例如 uitableview 中的文章图像和标题 我无法在 uitableview 中实现分页 假设我的 JSON 链接是 www example com page 1 一次包含