【问题标题】:How to make dynamically adding of rows when user reached to the last row of the UITableView?当用户到达 UITableView 的最后一行时,如何动态添加行?
【发布时间】:2013-06-21 20:00:41
【问题描述】:

我有一个UITableview,它显示了当前固定为静态的 10 行。现在我想在其中添加一个功能。当用户到达UITableView 的最后一行时,我想向表中添加更多的 10 行。我的意思是目前我在应用程序中显示固定的 10 行。

但现在我想在用户到达之前UITableview 的最后一行时再添加 10 行。

请给我任何建议或任何示例代码来实现我的动机。提前致谢。

【问题讨论】:

    标签: iphone uitableview dynamic


    【解决方案1】:

    其实很简单。你需要做的是实现tableView:willDisplayCell:forRowAtIndexPath:方法,它属于UITableViewDelegate协议。每次将要显示单元格时都会触发此方法。因此,它将让您知道何时将显示最后一个单元格。然后你可以做类似的事情-

    – (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath 
    {
         if(indexPath.row == [self.array count] - 1) //self.array is the array of items you are displaying
         {
              //If it is the last cell, Add items to your array here & update the table view
         }
    }
    

    另一个(有点数学)选项是实现UIScrollView 委托方法(UITableViewUIScrollView 的子类),即scrollViewDidEndScrollingAnimation:scrollViewDidScroll:。这些将使您知道用户正在查看的内容的 y 位置。如果发现最底部的内容是可见的,可以添加更多项。

    HTH,

    阿克谢

    【讨论】:

      【解决方案2】:

      uitableview 派生自 uiscrollview。为了实现你的目标,你需要实现scrollViewDidEndDecelerating

       - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
      {
          float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
          if (endScrolling >= scrollView.contentSize.height) 
          {
            // your code goes here
          }
      }
      

      这将检测到“弹跳效果”,例如将可见行向上移动以指示人们希望看到更多。

      【讨论】:

      • 聪明的解决方案,但我认为检测你在 cellForRowAtIndexPath 中的最后一个(或最后一个)单元格更好。这样您就不必等到通过最后一个单元格后才加载更多数据。
      【解决方案3】:

      您究竟希望如何调用额外 10 行的加载?当用户向下滚动查看默认加载的前 10 个时,他可能不想再加载 10 个。

      您可以在表格的最后一行添加“添加更多”行。当用户点击这个时,您会再添加 10 个。

      (我不知道如何检测“弹跳效果”,例如将可见行向上移动以表明人们希望看到更多。)

      基本逻辑如下所示:

      1. cellForRowAtIndexPath 中检查用户是否点击了最后一行,然后调用您的代码添加 10
      2. 要实际添加 10 行,您必须致电 [myTable reloadData]
      3. 但在调用之前,您需要将 numberOfRowsInSection 的返回值增加 10,并确保 cellForRowAtIndexPath 将正确返回您的新行 11-20

      ps 如果您真的希望在用户到达表末尾时再加载 10 行,您需要在最后一行调用 cellForRowAtIndexPathwillDisplayCell:forRowAtIndexPath: 时再调用 10 行。

      【讨论】:

        【解决方案4】:
        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
            return [categoriesList count];
        }
        

        这里的 categoriesList 是一个数组。我们可以将对象添加到这个数组中,然后在 tableview 中调用 reloadData。

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 1970-01-01
          • 2014-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多