0

我想在我放入viewdidload()以下代码的视图控制器中添加一个刷新栏按钮:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshTable)];
self.navigationItem.leftBarButtonItem = refreshButton;

和可刷新功能是:

- (void) refreshTable
{
    [self.tableView reloadData];

    NSLog(@"table is refreshing ....");
}

这是刷新按钮的屏幕截图: 在此处输入图像描述

但它不起作用,我应该在 refreshtable 函数中添加其他内容吗?表格视图没有刷新!,每次单击刷新按钮时都会出现消息“表格正在刷新 ....”,但表格不加载新数据!

刷新时,我可以在某个地方有这个图标吗? 在此处输入图像描述

如果我的视图控制器中有两个表视图,并且我希望在单击刷新按钮时只重新加载第一个表,

在此处输入图像描述

我输入了您建议的相同代码,但在这里不起作用!我应该做点别的吗?

4

3 回答 3

0

尝试这个 。

[self.tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
             withRowAnimation:UITableViewRowAnimationNone];

[self.tableView endUpdates];
于 2013-06-08T11:38:17.660 回答
0

问题是您在viewDidLoad(根据您的评论)中添加了数据获取逻辑。

viewDidLoad 方法将在视图加载时被调用。除非您关闭视图并再次显示它,否则它不会被调用(如果您调用reloadData它只是为了重新加载它,它将不会被调用UITableView)。

当您调用reloadData数据源时仍然使用旧数据,它不会更新。

所以实现你的refreshTable方法,如:

- (void) refreshTable
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://....../fastnews.php"]];
         [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
    });
}

-(void)fetchedData:(NSData *)responseData
{
   NSError *error;
   NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
  fastResults = [json objectForKey:@"nodes"];
  [self.tableView reloadData];
}
于 2013-06-08T11:48:25.140 回答
0

您需要在表格之前更新您的dataSourceAaaayinrefreshTable方法。reload

于 2013-06-08T12:29:18.433 回答