UITableView无法正确重新加载

时间:2015-07-10 03:32:13

标签: ios uitableview cell reloaddata

我一直遇到这个问题,表视图第一次不加载单元格或显示临时标签。在这两种情况下,当第二次加载表时(通过另一个按钮,我强制它重新加载或通过转到应用程序中的上一个视图并返回到表),所有内容都按预期显示。

我正在使用[table reloadData]重新加载viewDidAppear:方法中的表,因为它在viewDidAppear:方法中不起作用,而在另一种情况下我将其置于按钮操作中。

我也在使用这种方法来设置我在故事板中放置的单元格的标签:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [contactsTableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    UILabel *label = (UILabel *)[cell viewWithTag:1001];
    label.text = [Array3 objectAtIndex:indexPath.row];

    return cell;
}

修改

我在实现下面声明了数组:     NSMutableArray * Array3; 之后在ViewDidLoad方法中我声明了数组的其余部分:     Array3 = [NSMutableArray arrayWithObjects:nil]; 然后我通过调用ViewDidLoad方法中的函数来加载数组中的元素,以使用元素填充数组。

编辑2 显示更多我如何填充数组 - (void)viewDidLoad {

[super viewDidLoad];
Array3 = [NSMutableArray arrayWithObjects: nil];
 [self loadArray];

}
- (void) loadArray
//populate array in here.
// I use the add object method
//  [Array3 addobject:object];
{

4 个答案:

答案 0 :(得分:1)

  1. 首先是好消息:您的方法cellForRowAtIndexPath是正确的。

  2. 无需在reloadData-viewDidAppear:中调用-viewWillAppear。如果您在视图被覆盖时修改 Array3 的内容,则此注释可能不适用,这是一种特殊情况。

  3. 这不是您定义方法的位置,而是您调用它的位置。填充 Array3 内容的合理位置在

    required init(coder aDecoder: NSCoder!)
    

    override func viewDidLoad()
    

    <强>陷阱

    此外,您需要根据数组返回一致的所有委托方法(numberOfSectionsInTableViewnumberOfRowsInSectioncellForRowAtIndexPath)。一种简单的技术是使用数组中的条目数来驱动numberOfRowsInSection

    何时使用reloadData?

    reloadData的典型用法如下所示:

    - (void)loadArray {
        //populate array in here.
        ...
        [self.tableview reloadData]; // Possibly postpone to main thread
    }
    

答案 1 :(得分:0)

我认为Array3在第一次加载时为零。

答案 2 :(得分:0)

单元格标识符是唯一的,例如

NSString *cellIdentifier =[NSString stringWithFormate:@"%d",indexPath.row];

也许这会对你有帮助......

答案 3 :(得分:0)

我相信在Array3的初始设置中,您必须将此变量分配给内存,然后在不同的函数中使用,例如tableView:cellForIndexPath:

因此,您可以使用Array3 = [NSMutableArray arrayWithObjects: nil];

代替Array3 = [[NSMutableArray alloc] init];

由于您在此代码行中将其作为空数组保留,因此您不会使用[[NSMutableArray alloc] initWithObjects: nil];,因为它实际上是相同的交易