我正在创建自己的基类,它将充当 UITableViewController
的替代品(我们称之为 IRTableViewController
)。因此,我对 UIViewController
进行子类化,并且希望以与 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
,当我有一个nib文件时,事情会按预期工作,并且初始化一个新的子类使用以下其中一项:
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
中设置 View 属性(以及添加 UITableView
subview )。但是,如果我重写此方法,则意味着它将在所有情况下运行,即使是在使用关联的 nib 文件初始化对象时也是如此。
有办法做我想做的事吗?更糟糕的是,如果我重写 -loadView
,根据文档,我不应该调用 [super loadView]
,那么当我有 nib 文件吗?
[super loadView]
,我想避免这种情况。
最佳答案
如果您不愿意在 nibName != nil
的情况下调用 [super loadView]
,您始终可以使用 loadNibNamed:( NSString *)名称所有者:(id)所有者选项:(NSDictionary *)选项
?
关于ios - 如何重新创建 UITableViewController 的初始化行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16479022/