如何在加载UITableViewCell时设置UIActivityIndi​​catorView

我有两个UITableViewController ,A和B.当我点击表格A中的一个单元格时,我将使用UINavigationController来推动表格视图控制器B.但是B的数据是从Internet下载的,这需要几秒钟的时间。 所以我想在加载B时添加一个UIActivityIndicatorView 。我怎么能实现这个?

你可以添加UIActivityIndi​​catorView作为cellView附件

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; spinner.frame = CGRectMake(0, 0, 24, 24); UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; cell.accessoryView = spinner; [spinner startAnimating]; [spinner release]; } 

在tableview B类的viewDidLoad中,添加一个活动指示器。

 // Create the Activity Indicator. let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) activityIndicator.hidesWhenStopped = true view.addSubview(activityIndicator) // Position it at the center of the ViewController. activityIndicator.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ activityIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor), activityIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor)]) activityIndicator.startAnimating() 

现在调用从networking下载数据的方法。

 myDownloadMethod() 

如果您不希望UI在过程中不响应,请在另一个线程中执行此操作。

读这个线程的。 我可以使用后台线程来parsing数据吗?

当你被通知下载内容时,停止指示器。

 activityIndicator.stopAnimating() 

现在你可以调用tableview.reloadData()来重新加载表来显示新的内容。

 UIActivityIndicatorView * activityindicator1 = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(150, 200, 30, 30)]; [activityindicator1 setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge]; [activityindicator1 setColor:[UIColor orangeColor]]; [self.view addSubview:activityindicator1]; [activityindicator1 startAnimating]; [self performSelector:@selector(callfunction) withObject:activityindicator1 afterDelay:1.0]; -(void)callfunction { // Here your stuf } 

这对我很好,你可以试试看:
[activityIndi​​cator startAnimating ]当didHighlightRowAtIndexPath ,[activityIndi​​cator stopAnimating ]时, didUnhighlightRowAtIndexPath比didSelectRowAtIndexPath有用。

 - (void)runIndicatorAtIndexPath:(NSIndexPath *)indexPath display:(BOOL)playing{ UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; cell.accessoryView = activityIndicator; playing == YES ?[activityIndicator startAnimating]:[activityIndicator stopAnimating]; } - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { [self runIndicatorAtIndexPath:indexPath display:YES]; } - (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath{ [self runIndicatorAtIndexPath:indexPath display:NO]; } 

如果在服务器上有更多的数据,下面的代码将在表格视图的页脚上显示一个微调。 您可以根据您从服务器获取数据的逻辑来更改它。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { /* set cell attributes here */ NSInteger lastSectionIndex = [tableView numberOfSections] - 1; NSInteger lastRowIndex = [tableView numberOfRowsInSection:lastSectionIndex] - 1; if ((indexPath.section == lastSectionIndex) && (indexPath.row == lastRowIndex)) { if(isMoreDataAvailableOnserver) { [self showSpinnerAtFooter]; [self getMoreDataFromServer]; } else { [self hideSpinnerAtFooter]; } } return cell; } -(void) hideSpinnerAtFooter { self.tableView.tableFooterView =nil; } -(void) showSpinnerAtFooter { UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; [spinner startAnimating]; spinner.frame = CGRectMake(0, 0, 320, 44); self.tableView.tableFooterView = spinner; }