0

在我的 UITableView 中,我使用了带有书名、书状态和续订按钮的自定义单元格。但是,图书状态需要一些加载视图互联网,因此需要时间来加载。

尝试过异步加载书籍状态的部分,但这太难了。因此,我试图改用“加载数据”微调器。已经为微调器创建了一个类并在其中实现,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];
}

我已经尝试过将它放入其中,viewDidLoadviewWillAppear它似乎不起作用。所有的结果都是当所有东西都已经完成加载时,微调器出现在最后。

- (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;

}

4

4 回答 4

0

事件虽然你没有发布noOfRenewalLeft我认为它正在加载到主线程中并阻止它的详细信息。因此,在主线程继续之前(完成下载后),您的活动指示器无法呈现。尝试异步下载和委托。

于 2012-08-24T07:45:23.847 回答
0

只需使用默认的 Apple ActivityIndi​​cator 并将其放入 Cell 中即可。你不需要一个类。然后在您完成加载时创建一个通知,或者在加载完成时创建一个将被调用的委托方法。然后,此方法删除微调器并将正确的内容放入单元格中。之后刷新已完成加载的单元格,仅此而已。

于 2012-08-24T07:20:34.217 回答
0

创建单独的方法并使用 performselectorinbackground 调用该方法以加载活动指示器,因为从 Internet 加载任何内容作为主线程中的负载,因此一旦下载过程完成,活动指示器就会加载。

于 2012-08-24T08:50:30.853 回答
0

最后我所做的是将 UIActivityIndi​​cator 放在 viewDidLoad 方法中,并在 viewDidAppear 中取消它。现在可以了!也谢谢大家的帮助:)

于 2012-08-26T17:33:46.853 回答