【问题标题】:How to recreate the UITableViewController's initializing behavior?如何重新创建 UITableViewController 的初始化行为?
【发布时间】:2013-05-10 09:24:16
【问题描述】:

我正在创建自己的基类,它将充当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 中设置视图属性(以及添加UITableView 子视图)。但是,如果我重写此方法,则意味着它将在所有情况下运行,即使在初始化对象时使用关联的 nib 文件。

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

PS。我见过Matt Gallagher's related post,但在他的情况下,他打电话给[super loadView],我想避免这种情况。

【问题讨论】:

    标签: ios objective-c cocoa-touch uiviewcontroller uitableview


    【解决方案1】:

    如果您不喜欢在nibName != nil 的情况下调用[super loadView],您可以随时使用loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options 自己加载笔尖?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2012-02-16
      • 2014-10-17
      • 2016-06-26
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多