2013-05-10 29 views
0

我正在創建自己的基類,它將作爲UITableViewController替代品(我們稱之爲IRTableViewController)。因此,我繼承UIViewController,我想有以下初始化,以類似的方式向UITableViewController如何重新創建UITableViewController的初始化行爲?

-(id)init; 
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil; 
-(id)initWithStyle:(UITableViewStyle)style; 

對於上述看起來像這樣實現:

-(id)init 
{ 
    return [self initWithStyle:UITableViewStylePlain]; 
} 


// The designated initializer of the superclass must call the new designated initializer 
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    return [self initWithStyle:UITableViewStylePlain]; 
} 


// The designated initializer, must call the superclass designated initializer 
- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithNibName:nil bundle:nil]; 
    if (self) 
    { 
     self.style = style; 
     self.clearsSelectionOnViewWillAppear = YES; 
    } 
    return self; 
} 

現在,如果我覆蓋-loadView,工作的事情根據需要當我有一個榫文件我初始化使用下面的一個新的子類:

MyIRTableViewController *vc = [[MyIRTableViewController alloc] init]; 
MyIRTableViewController *vc = [[MyIRTableViewController alloc] initWithStyle:UITableViewStylePlain]; 
MyIRTableViewController *vc = [[MyIRTableViewController alloc] initWithNibName:nil bundle:nil]; 
MyIRTableViewController *vc = [[MyIRTableViewController alloc] initWithNibName:@"MyIRTableViewController" bundle:nil]; 

問題來了,當我想用​​我的基類沒有一個nib文件。在這種情況下,就我的理解,我需要在-loadView中設置視圖屬性(以及添加UITableView子視圖)。但是,如果我重寫此方法,這意味着它將在所有情況下運行,即使在初始化對象關聯的nib文件時也是如此。

有沒有辦法做我想要的?更糟的是,如果我覆蓋-loadView,根據文檔,我不應該調用[super loadView],那麼如何在忽略發生在我有一個nib文件時發生的任何事情?

PS。我見過Matt Gallagher's related post,但在他的情況下,他撥打[super loadView],我想避免這種情況。

回答

1

如果您不願意在調用[super loadView]的情況下使用nibName != nil,您可以使用loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options自行加載筆尖?

+0

感謝您指點我正確的方向! – phi 2013-05-13 07:55:45

相關問題