我有一個UITableView其中數據源是核心數據使用NSFetchRequest。核心數據包含從我的網站上的數據庫下載的新聞項目。核心數據在默認情況下包含50個最新的項目,並且在到達UITableView的底部時延遲下載較舊的項目。如何將自定義單元添加到UITableView的底部?
我目前正在使用tableView:numberOfRowsInSection
方法處理這個問題,其中我爲最後一部分返回+1,這是我的「加載項目」單元格。在tableView:cellForRowAtIndexPath
方法中,當IndexPath是最後一節中的最後一行時,我創建了「加載項目」單元格。
問題是,當新數據下載之前是「加載項目」單元格的單元格現在是常規新聞項目單元格。但是當細胞離開細胞並回來時,細胞首先被重新加載。
當延遲加載完成時,我可以存儲「加載項目」單元格的indexPath並重新加載該單元格。但我想知道,如果有任何更好的解決方案存在這個問題?
EDIT1:
這裏是我創造了 「加載項」 的UITableViewCell程序。
cell.textLabel.text = [NSString stringWithFormat:@"%@\u2026", NSLocalizedString(@"LOADING_MORE", nil)];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIImage *spacer = [UIImage imageNamed:@"Spacer"];
UIGraphicsBeginImageContext(spinner.frame.size);
[spacer drawInRect:CGRectMake(0,0,spinner.frame.size.width,spinner.frame.size.height)];
UIImage* resizedSpacer = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cell.imageView.image = resizedSpacer;
[cell.imageView addSubview:spinner];
[spinner startAnimating];
EDIT2:
我試圖 「設計」 的footerView使用下面的代碼。目前活動指標位於左上角位置,標籤不可見。
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
NSInteger sectionsAmount = [tableView numberOfSections];
if (section == sectionsAmount - 1) {
return 20;
}
return 0;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
NSInteger sectionsAmount = [tableView numberOfSections];
if (section == sectionsAmount - 1) {
if (_tableFooterView==nil) {
UIView *view = [[UIView alloc] init];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIImage *spacer = [UIImage imageNamed:@"Spacer"];
UIGraphicsBeginImageContext(spinner.frame.size);
[spacer drawInRect:CGRectMake(0,0,spinner.frame.size.width,spinner.frame.size.height)];
UIImage* resizedSpacer = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = resizedSpacer;
[imageView addSubview:spinner];
[spinner startAnimating];
[view addSubview:imageView];
UILabel *label = [[UILabel alloc] init];
label.text = [NSString stringWithFormat:@"%@\u2026", NSLocalizedString(@"LOADING_MORE", nil)];
[view addSubview:label];
_tableFooterView = view;
}
return self.tableFooterView;
}
return nil;
}
我如何可以改變的UIView看起來像下面的圖片:
EDIT3:
這是我setupTableFooterView這裏我指定一個視圖的tableFooterView
。該方法從viewDidLoad調用。
- (void) setupTableFooterView {
UIView *view = [[UIView alloc] init];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIImage *spacer = [UIImage imageNamed:@"Spacer"];
UIGraphicsBeginImageContext(spinner.frame.size);
[spacer drawInRect:CGRectMake(0,0,spinner.frame.size.width,spinner.frame.size.height)];
UIImage* resizedSpacer = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = resizedSpacer;
[imageView addSubview:spinner];
[spinner startAnimating];
imageView.frame = CGRectMake(10, 11, 20, 20);
[view addSubview:imageView];
UILabel *label = [[UILabel alloc] init];
label.text = [NSString stringWithFormat:@"%@\u2026", NSLocalizedString(@"LOADING_MORE", nil)];
[label setFont:[UIFont italicSystemFontOfSize:13]];
[label setFrame:CGRectMake(40, 0, 270, 43)];
[view addSubview:label];
self.tableView.tableFooterView = view;
}
感謝您的評論,我認爲這可能是我的解決方案。我嘗試設置tableFooterView失敗。你能看看我的EDIT2嗎? – dhrm 2012-01-31 22:28:10
您正在植入一款Footer,我當時建議使用tableFooter。當然,一個sectionFooter是一個選項,但我會建議使用tableFooter來代替。請檢查鏈接的參考。 – Till 2012-01-31 22:38:47
對不起,你在哪裏沒錯。我已將視圖初始化添加到* viewDidLoad *。你能看到我的'EDIT3'嗎? – dhrm 2012-01-31 22:47:10