【问题标题】:How to add data in UITableview at run time?如何在运行时在 UITableview 中添加数据?
【发布时间】:2011-07-25 10:11:31
【问题描述】:

当我们滚动到 UITableView 的最后一个单元格时,我想在 UITableview 中添加数据或单元格。换句话说,正如我们在许多 iPhone 应用程序中看到的那样,当我们到达 UITableview 的最后一个单元格时,会在运行时向其中添加更多单元格。我想在我的项目中实现该功能。

意味着当我们到达之前添加的最后一个单元格时,向 UITableview 添加更多单元格。

请告诉我示例代码或任何教程。

【问题讨论】:

  • 同样的功能已经被苹果跟在tableviewcell上。已经实现了一个。所以就用它吧。
  • 我知道如何在 UITableview 中显示数据。我想在用户到达最后一个单元格时添加数据。表示当用户到达最后一个单元格时,向其中添加更多单元格和数据。

标签: iphone objective-c uitableview uiscrollview


【解决方案1】:

我认为这里有两个问题。 一、如何检测tableVeiw的结束?二、如何动态添加cell? 第一个问题,我觉得可以通过观察scrollView的content offset或者tableView cell的当前indexPath的值来完成。 scrollView 的内容偏移可以通过下面的 UIScrollViewDelegate 方法观察。内容偏移量是 scrollView 的一个属性。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
   CGFloat currentOffset = scrollView.contentOffset;

   // Detect scrolling to bottom by this offset value.
   ....
}

cell的索引可以通过UITableViewDataSource的方法来决定。

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

第二个问题可以被UITableView的方法压倒。

  • 开始更新
  • 结束更新
  • insertRowsAtIndexPaths:withRowAnimation:
  • deleteRowsAtIndexPaths:withRowAnimation:
  • insertSections:withRowAnimation:
  • deleteSections:withRowAnimation:

我记得this official document 中的示例代码将教如何使用上述方法。它们不会重新加载所有单元格,但粗心的操作很容易导致崩溃。

【讨论】:

    【解决方案2】:

    如果您将数据存储在 数组 中,那么您肯定会有 count 您想要多少个单元格。 使用以下代码为您提供帮助

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return [array count];}
    

    我相信这会对你有所帮助。

    【讨论】:

    • 但是当用户到达表格视图的最后一个单元格时,我想添加更多从网络调用的数据
    • 好的。所以你知道你最后一个细胞的数量吗?我的意思是在 viewWillAppear 期间您最初有多少个单元格
    【解决方案3】:

    使用数组填充 tableView(您应该始终这样做)。当委托方法 cellForRowAtIndexPath 向您询问最后一个单元格时,使用新的(更多)数据重新填充您的数组并创建一个 [tableView reloadData]

    【讨论】:

    • 但它会重新加载所有表数据。我想将数据添加到UITableView中之前存储的数据中
    • 这将导致。如果您使用 mutableArray 来存储 tableView 内容,只需将新数据添加到其中即可。当您调用 [tableView reloadData] 时,它会简单地识别出现在有更多可用数据,并且会添加其他单元格。
    【解决方案4】:

    您只想在表格中添加数据?

    然后,首先您可能需要再添加一个视图,即模态视图。你应该写一些关于你想在这个视图中添加什么的规范。

    接下来您向现有数据数组发送消息(假设您使用数组)

    [ExistingArrayData addObject:TemporalilyNewObject];
    

    您可以使用NSSortDescriptor对数据进行排序。

    NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:KEY_VALUE ascending:YES selector:@selector(caseInsensitiveCompare:)];
    [ExistingArrayData sortUsingDescriptors:[NSArray arrayWithObject:nameSorter]];
    

    在这种情况下,此方法按 KEY_VALUE 对数据进行升序排序。

    最后,你应该在 RootView 的 viewWillAppear 方法中添加这段代码。

    [self.tableView reloadData];
    

    此代码通知应用程序数据的变化。

    【讨论】:

    • 不,我想在我们到达表格的最后一个单元格时添加数据
    • 为什么要在到达最后一个单元格时添加数据?不是通过点击“+”按钮?
    【解决方案5】:
        -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    
            int i=0;
    
            i=indexPath.row;
    
            int count=[urTablearray count];
    
            if (count == (++i)) {
    
                    //do ur stuff here
    
                         here add object to urTablearray
    
                         [urTablearray addObject:@"vijay"];
    
    
            }
    
    
        }
    

    注意:urTablearray 是 NSMutableArray 类型而不是 NSArray

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2015-08-15
      • 2014-07-15
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2011-10-17
      相关资源
      最近更新 更多