【问题标题】:how to update data in tableView?如何更新tableView中的数据?
【发布时间】:2011-03-30 05:06:54
【问题描述】:

我使用viewDidLoad 中的数组初始化表中的数据,然后将数据添加到单元格中。这是我在书中读到的标准方法。 这就是我所拥有的:

- (void)viewDidLoad {
    [super viewDidLoad];
    //Create array and add data ("tableViewValues" is initialized in .h file)
    tableViewValues = [[NSMutableArray alloc]init];
    [tableViewValues addObject:@"$280,000.00"];
    [tableViewValues addObject:@"$279,318.79"];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    NSString *cellValue = [tableViewValues objectAtIndex:indexPath.row];

    cell.textLabel.text = cellValue;

    return cell;
}

所以当视图加载时,这两个货币值在我的表中。 现在在另一个函数中,我根据用户在文本字段中输入的内容,用不同的货币数字填充另一个数组。我将如何更新当前的表视图并将这些值替换为其他数组中的值?谁能帮我?谢谢!

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    你可以打电话

    [self.tableView reloadData];
    

    但是,要重新加载所有数据,您需要编写一种方法来让您想要填充表格的数组。也许您希望您的 -cellForRowAtIndexPath 调用有条件地选择正确数组的私有方法。

    【讨论】:

    • 我得到了重新加载数据,谢谢。但是我无法用数组中的值填充每个单元格?你能详细说明一下如何做到这一点吗?
    • 视情况而定。获得新值后是否需要返回初始值?你的表更新值是什么。没有更多信息很难说。
    • 我有一个文本字段委托“shouldChangeCharactersInRange”,我在该方法中用数字填充了一个数组。所以数组是不断变化的。我不在乎旧的价值观。每次调用该方法时,我只想获取我的数组值并将其放入表中。
    • 然后在该方法中,只需用新值替换旧的 tableViewArray。您可能希望将 tableViewValues 设为一个属性,然后通过调用 self.tableViewValues 来调用它的 setter,这将负责释放旧值并保留新值
    • 我一定遗漏了一些东西,因为数据没有更新。我打印出我的 tableView 数组以确保它具有我想要的数字并且确实如此。但是当我调用 [self.myOwnTableView reloadData]; 时,什么也没有发生。我很困惑哈哈。
    【解决方案2】:

    您必须从数组中删除所有值,然后您必须调用表重新加载数据

    // In the method where you will get new values
    [tableViewValues removeAllObjects];  
    [tableViewValues add:@"new values"];  
     //reload table view with new values
    [self.tableView reloadData];
    

    【讨论】:

    • 同样的问题。这会增加什么新东西吗?因为它和已经被接受的答案基本相同。
    【解决方案3】:

    我遇到过很多次这个问题,我总是犯同样的错误。

    [self._tableview reloadData] 有效!

    问题是您填充表格的位置。

    我是在 -(void)viewDidLoad 中完成的,并且该表已更新并使用了相同的数据。显然什么都没有发生。

    在之前调用 [self._tableview reloadData] 的同一位置更新表视图(plist、字典、数组等)的内容。

    这是关键!!!

    做一个测试:

    #pragma mark - Actions
    
    - (IBAction)refreshParams:(id)sender {
    
       self.dictionary = nil;
    
       [self._tableView reloadData];
    }
    

    当您按下刷新按钮时,您可以看到 tableview 内容是如何消失的。显然,这是一个例子。我使用字典填充表格并使用按钮刷新内容。

    【讨论】:

      【解决方案4】:

      您需要(释放和)重新创建相同的 tableViewValues 数组,然后在 tableView 上调用 reloadData 方法,如下所示:

      [self.tableView reloadData];
      

      如果您在表视图控制器上并且self.tableView 指向有问题的表,这将起作用。

      【讨论】:

        【解决方案5】:

        在那个函数中,给新数组赋值后,你要做的就是

         [tableViewValues removeAllObjects];
         tableViewValues = [[NSMutableArray alloc] arrayByAddingObjectsFromArray:newArray];
         [self.tableView reloadData];
        

        【讨论】:

        • 谢谢,这就是我想要的!
        【解决方案6】:
        [self.tableView reloadData];
        

        会为您提供帮助。

        【讨论】:

          【解决方案7】:

          在 Swift 中,

          tableView.reloadData()self.tableView.reloadData(),其中 tableView 是 ViewController 中的一个属性。

          【讨论】:

            猜你喜欢
            • 2019-09-06
            • 2015-09-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多