UITableView - 使用reloadRowsAtIndexPath

时间:2015-05-19 08:56:44

标签: ios objective-c uitableview uirefreshcontrol

我有UITableView声明了委托方法。 numberOfRows& numberOfSections会动态更新。

 (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section{}

 (NSInteger)numberOfSectionsInTableView:

我需要使用[tableView reloadData],而不是使用reloadRowsAtIndexPath

但是我遇到了行数无效的崩溃。如何处理dataSource更改?让我说我有一个计数数组10,当我通过拉动使用UITableView重新加载UIRefreshControls时,以及来自服务器的数据。从10开始,如果数组的数量减少到1,我将如何处理reloadRowsAtIndexPath

[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathForVisibleRows] withRowAnimation:UITableViewRowAnimationNone] 

调用它时似乎发生了崩溃。我如何处理数据数组的计数变化?

3 个答案:

答案 0 :(得分:1)

要重新加载Tableview的特定单元格,方法为 reloadRowsAtIndexPaths:而非 reloadRowsAtIndexPath

    [self.tableview reloadRowsAtIndexPaths:[self.tableview indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];

但是,为了使reloadRowsAtIndexPaths正常工作,数据源需要一致。由于已经加载了索引路径。

如果您仍然使用此方法,您将获得arrayIndexOutofBound错误或单元格中的重复值(取决于数据源的增加或减少)。

答案 1 :(得分:1)

    //call begin and end updates while performing some hard core actions  on tableview
    [My_Table beginupdates];
    [My_Table reloadRowsAtIndexPaths:[My_Table indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];
    [My_Table endupdates];
    hope it will helps you.

答案 2 :(得分:0)

你可以试试这个。

[tblMe beginUpdates];
[tblMe reloadRowsAtIndexPaths:[NSArray arrayWithObjects:[NSIndexPath indexPathForRow:0 inSection:0], nil] withRowAnimation:UITableViewRowAnimationNone];
[tblMe endUpdates];

希望这可能有所帮助!!!