使用刷新栏按钮刷新视图控制器中的表

时间:2013-06-08 11:26:57

标签: iphone ios uibarbuttonitem uibarbuttonitemstyle

我想在视图控制器中添加一个刷新条按钮 我输入了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 ....");
}

这是刷新按钮的屏幕截图: enter image description here

但它不起作用,我是否应该在刷新功能中添加其他东西?,表视图不刷新!,每次点击刷新按钮时都会出现“table is refresh ....”消息,但是表格没有加载新数据!

刷新时,我可以在某处找到这个图标吗? enter image description here

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

enter image description here

我把你建议的代码与你的代码相同,但它在这里不起作用!我应该做点什么吗?

3 个答案:

答案 0 :(得分:0)

试试这个。

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

[self.tableView endUpdates];

答案 1 :(得分:0)

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

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

当您致电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];
}

答案 2 :(得分:0)

您需要在dataSourceAaaay表之前的refreshTable方法中更新reload