所以,這裏是情況。我有一個基類SSSAdEnabledTableViewController,它帶有一個XIB文件,在主視圖中有一個_contentView,在該視圖中有_tableView。基類正被用於渲染/隱藏廣告。在調用super之前,UIViewController的子類可以在viewDidLoad中做一些初始化嗎?
然後我有許多繼承自該基類的子類。除了那些需要非標準表格單元格(在本例中爲SSSDataEntryTableCell)的表格之外,大多數表格視圖都可以正常工作。
如果我嘗試在調用super後在我的子類的viewDidLoad中註冊該自定義表格單元格的nib,它不起作用,我的表格視圖數據源和委託將返回零單元格。但是,如果我在致電super之前註冊NIB,它似乎工作得很好。
我有的問題是,如果這是不好的做法,並表明我做錯了什麼,反過來導致需要做到這一點。
相關的代碼片段如下:
的基類 - SSSAdEnabledTableViewController
@interface SSSAdEnabledEditTableViewController : UIViewController <ADBannerViewDelegate, UITableViewDataSource, UITableViewDelegate>
{
// the data table
UITableView *_tableView;
// our inner view (to show/hide ads)
UIView *_contentView;
// our ad banner
ADBannerView *_bannerView ;
}
@property (retain, nonatomic) IBOutlet UIView *contentView;
@property (retain, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, retain) ADBannerView *bannerView ;
@end
而且它的viewDidLoad方法:
- (void)viewDidLoad
{
[super viewDidLoad];
//
// set the appropriate background color
//
UIColor *clr = nil ;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
clr = kSSSDefaultBackgroundColor ;
}
else
{
clr = [UIColor groupTableViewBackgroundColor] ;
}
[[self view] setBackgroundColor:clr] ;
[_tableView setAutoresizesSubviews:YES] ;
}
這裏是子類的viewDidLoad方法之一:
- (void)viewDidLoad
{
// Load the NIB file for our custom cell -- do this before [super viewDidLoad]!
UINib *nib = [UINib nibWithNibName:kSSSDataEntryTableCell bundle:nil] ;
// Register the NIB which contains the cell
[_tableView registerNib:nib forCellReuseIdentifier:kSSSDataEntryTableCell] ;
[super viewDidLoad];
// ... does some other stuff not relevant to the question at hand ...
}
因此,如果我首先調用[super viewDidLoad],那麼在NIB註冊並且失敗之前,代碼正在爲cellForRowAtIndexPath調用UITableView方法。通話之前,它似乎工作得很好。
這是正確的方法來做到這一點,或者我是我做錯了嗎?
謝謝!
謝謝!這就解釋了爲什麼我看到了對tableView:cellForRowAtIndexPath的調用。從來不會想到設置背景會導致該問題。再次感謝。 –