为啥UITableView不能reloadData

Posted

技术标签:

【中文标题】为啥UITableView不能reloadData【英文标题】:Why UITableView can't be reloadData为什么UITableView不能reloadData 【发布时间】:2011-10-19 07:56:35 【问题描述】:
 -(void) reload
        [self.tableViewa reloadData];
    

    -(void) viewWillAppear:(BOOL)animated
        [self.tableViewa reloadData];
        [cachedProperties setTags:nil];


        self.tabBarController.navigationItem.rightBarButtonItem =nil;
        self.tabBarController.navigationItem.leftBarButtonItem =nil;
    

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    
        return [[cachedProperties getTags] count];
    

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    
        static NSString *CheckMarkCellIdentifier = @"CheckMarkCellIdentifier";
        UITableViewCell * cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CheckMarkCellIdentifier] autorelease];

        NSUInteger row = [indexPath row];

        if([[[cachedProperties getTags] objectAtIndex:row] isNotEmpty])
            cell.textLabel.text = [[cachedProperties getTags]objectAtIndex:row];
            cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
        
        return cell;
    

使用此方法,当 viewWillAppear 有一个代码 [self.tableviewa reloadData] 并会调用 numberOfRowsInSection,但是当我调用具有 [self.tableviewa reloadData] 的方法 Reload 时,不会调用函数 numberOfRowInSection.. 如何是真的吗?这个问题有什么原因吗?

因为在第一次调用 viewWillAppear 时,[cachedProperties setTags:nil] 将设置标签并将调用 -(void) reload [self.tableViewa reloadData]; 或 [thatClass.tableViewa reloadData] 我需要使 tableView 不为空。为什么tableView没有reloadData?

【问题讨论】:

numberOfSectionsInTableView: 方法呢?您是否检查过它返回的值不是0 【参考方案1】:

试试这个:

 -(void) reload
        [self.tableViewa reloadData];
        [cachedProperties setTags:nil];
    

    -(void) viewWillAppear:(BOOL)animated
        [self reload];

        self.tabBarController.navigationItem.rightBarButtonItem =nil;
        self.tabBarController.navigationItem.leftBarButtonItem =nil;
    

...

【讨论】:

以上是关于为啥UITableView不能reloadData的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITableView contentOffset 在 tableview reloadData 期间变化很大,而不是保持不变? reloadData 后如何使其保持不变?

UITableView reloadData() 不能快速工作?

iOS UITableView reloadData 导致键盘收起不能连续输入问题解决办法

不能使用其他类的 reloadData

ReloadData (UITableView) 不起作用

UITableView.reloadData() 没有刷新 tableView。没有错误信息