在我的UITableView中,我使用的是带有书名,书籍状态和续订按钮的自定义单元格。但是,图书状态需要一些加载视图互联网,因此需要时间来加载。
尝试过Asynchronous只加载书籍状态的部分但是太难了。因此,我试图改为使用“加载数据”微调器。已经创建了一个用于微调器的类并在cellForRowAtIndexPath
中实现,但是微调器只在最后显示我的UITable已经完成所有加载!我不知道在哪里放置这些代码:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
lVC = [[LoadingViewController alloc] initWithNibName:@"LoadingViewiPad" bundle:nil];
[self.parentViewController.view addSubview:lVC.view];
} else {
lVC = [[LoadingViewController alloc] init];
[self.parentViewController.view addSubview:lVC.view];
}
我已经尝试将其放在viewDidLoad
甚至viewWillAppear
中,但它似乎无法正常工作。所有事情的结果最终都表明,当所有事情都已经完成加载时,微调器会显示出来。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UserCustomCell *cell = (UserCustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"UserCustomCell" owner:self options:nil];
cell = userCustomCell;
self.userCustomCell = nil;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
cell.bookTitle.frame = CGRectMake(12, 0, 550, 40);
cell.renewButton.frame = CGRectMake(600, 14, 68, 24);
}
[cell.renewButton useBlackActionSheetStyle];
cell.bookTitle.text =@"Book Title";
// I place the UIActivityIndicator class here before I do the loading
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
lVC = [[LoadingViewController alloc] initWithNibName:@"LoadingViewiPad" bundle:nil];
[self.parentViewController.view addSubview:lVC.view];
} else {
lVC = [[LoadingViewController alloc] init];
[self.parentViewController.view addSubview:lVC.view];
}
NSString *reservation = [self noOfRenewalLeft:index]; ###### throw into method to do internet connection and checking
//method will then return NSString "reserved" or "notReserved"
if ([reservation isEqualToString: @"notReserved"]){ //if item not reserved
if([renewalLeftString isEqualToString: @"0"]){
cell.bookStatus.text = @"Reached Max Renewal Limit";
}
else{ //item not reserved & able to renew, therefore display renewal left
cell.bookStatus.text = [NSString stringWithFormat:@"Renewal Left: %@",renewalLeftString];
}
}
else {
cell.bookStatus.text = @"Item Reserved/On-Hold";
}
cell.renewButton.tag = index_tag;
return cell;
}
答案 0 :(得分:0)
只需使用默认的Apple ActivityIndicator并将其放入Cell。你不需要一堂课。 然后在加载完成后创建通知,或在加载完成时调用委托方法。然后,此方法删除微调器并将正确的内容放入单元格中。之后刷新已完成加载的单元格。
答案 1 :(得分:0)
事件虽然您没有发布noOfRenewalLeft
的详细信息,但我认为它正在主线程中加载并阻止它。因此,在主线程继续之前(完成下载之后)无法呈现您的活动指示器。尝试异步下载和委派。
答案 2 :(得分:0)
创建单独的方法并使用performselectorinbackground调用该方法来加载活动指示器,因为在主线程中加载任何来自Internet的内容,因此一旦下载过程完成,活动指示符就会加载。
答案 3 :(得分:0)
最后我做的是将UIActivityIndicator置于viewDidLoad方法中,并在viewDidAppear中取消它。它现在有效!谢谢大家的帮助:))