我正在创建一个应用程序,它作为UITableView从Web获取内容,解析并显示它。获取它并解析它需要一点时间,因此我使用加载指示符(MBProgressHUD)并在后台进行加载。我想在TableView的页脚添加一个按钮,所以我编写了这段代码:
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(myAction)
forControlEvents:UIControlEventTouchDown];
[myButton setTitle:@"Button Title" forState:UIControlStateNormal];
myButton.frame = CGRectMake(0, 0, 160.0, 40.0);
self.tableView.tableFooterView=myButton;
问题是它在我的后台内容加载代码之后的ViewDidLoad()期间在tableview中初始化
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeIndeterminate;
hud.labelText = @"Loading";
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do something...
[self getContent];
[self.tableView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
因此,当视图加载时,按钮设置在顶部(因为tableview为空)并且当它重新加载时,按钮保持在顶部,我需要转到另一个视图并返回到页脚中的按钮
有没有办法在内容加载后设置按钮?像-(void)tableViewDidReloadData
函数一样?
谢谢!
答案 0 :(得分:1)
是的,如果你在与[self.tableView reloadData]
(这是一个同步通话)相同的通话中这样做,它会在数据加载后显示。
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeIndeterminate;
hud.labelText = @"Loading";
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do something...
[self getContent];
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
[self.tableView reloadData];
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(myAction) forControlEvents:UIControlEventTouchDown];
[myButton setTitle:@"Button Title" forState:UIControlStateNormal];
[myButton setFrame:CGRectMake(0, 0, 160.0, 40.0)];
[self.tableView setTableFooterView:myButton];
});
});
答案 1 :(得分:0)
您应该只在主线程中调用[self.tableView reloadData];
。
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
答案 2 :(得分:0)
不要创建myButton并将其分配给ViewDidLoad委托中的tableview页脚,而不是在隐藏MBProgress HUD并重新加载表时创建它
试试这个应该有效
dispatch_async(dispatch_get_main_queue(), ^{
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(myAction)
forControlEvents:UIControlEventTouchDown];
[myButton setTitle:@"Button Title" forState:UIControlStateNormal];
myButton.frame = CGRectMake(0, 0, 160.0, 40.0);
self.tableView.tableFooterView=myButton;
[self.tableView reloadData];
[MBProgressHUD hideHUDForView:self.view animated:YES];
});