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];
}
私はすでにそれを入れてみましたが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;
}