【问题标题】:refresh the table in view controller by using refresh bar button使用刷新栏按钮刷新视图控制器中的表格
【发布时间】:2013-06-08 11:26:57
【问题描述】:

我想在我的视图控制器中添加一个刷新栏按钮 我把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 函数中添加其他内容吗?表格视图没有刷新!,每次单击刷新按钮时都会出现消息“表格正在刷新 ....”,但该表不加载新数据!

刷新时,我可以在某处有这个图标吗?

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

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

【问题讨论】:

  • 对不起,我刚刚编辑了
  • 把日志改成NSLog(@"table (%@) is refreshing ....", self.tableView);看看它说了什么
  • 您需要解释为什么您希望reloadData 的表格中出现不同的内容。在表格显示之前和您点击 [refresh] 的那一刻之间,数据源是否发生了变化?
  • @CarinaM:你从哪里得到那些需要在 tableview 上显示的数据?您正在使用哪种方法获取新数据?
  • @MidhunMP ;层 = ;内容偏移:{0, 0}>

标签: iphone ios uibarbuttonitem uibarbuttonitemstyle


【解决方案1】:

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

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];
}

【讨论】:

  • 请在你离开之前,你知道如何显示刷新图标(让用户知道视图正在刷新),检查上面的屏幕
  • 请您回答我的问题!
  • @CarinaM:您可以使用UIActivityIndicator
  • 你能给我一个简单的代码我如何在上面的代码中实现它?
  • @CarinaM:将此代码UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; spinner.center = CGPointMake(160, 240); spinner.hidesWhenStopped = YES; [self.view addSubview:spinner]; [spinner startAnimating];添加为refreshTable方法的第一行
【解决方案2】:

试试这个。

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

[self.tableView endUpdates];

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-31
      • 2016-07-28
      • 2018-04-02
      • 2016-11-21
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多