Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何重新创建UITableViewController';什么是初始化行为?_Ios_Objective C_Cocoa Touch_Uiviewcontroller_Uitableview - Fatal编程技术网

Ios 如何重新创建UITableViewController';什么是初始化行为?

Ios 如何重新创建UITableViewController';什么是初始化行为?,ios,objective-c,cocoa-touch,uiviewcontroller,uitableview,Ios,Objective C,Cocoa Touch,Uiviewcontroller,Uitableview,我正在创建我自己的基类,它将充当UITableViewController的替代品(我们称之为IRTableViewController)。因此,我正在对UIViewController进行子类化,并希望以与UITableViewController类似的方式使用以下初始值设定项: -(id)init; -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil; -(id)initWithSty

我正在创建我自己的基类,它将充当
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
子视图)。但是,如果我重写这个方法,这意味着它将在所有情况下运行,即使在使用相关联的nib文件初始化对象时也是如此

有没有办法做我想做的事?更糟糕的是,如果我覆盖
-loadView
,根据文档,我不应该调用
[super loadView]
,那么当我有一个nib文件时,我怎么会忽略那里发生的任何事情呢


注:我已经看到了,但在他的情况下,他调用了
[super loadView]
,我希望避免这种情况。

如果您不愿意在
nibName!=nil
您始终可以使用
loadNibNamed:(NSString*)name owner:(id)owner options:(NSDictionary*)选项自己加载nib