0

代替として機能する独自の基本クラスを作成しています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;
}

ここで、 をオーバーライドしないと、nib ファイルがあり、次のいずれかを使用して新しいサブクラスを初期化すると、必要に-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 ファイルなしで基本クラスを使用したい場合に発生します。その場合、私の理解では、ビュー プロパティを設定する (およびUITableViewサブビューを追加する)必要があり-loadViewます。しかし、このメソッドをオーバーライドすると、関連付けられた nib ファイルでオブジェクト初期化する場合でも、すべての場合に実行されることになります。

私がやりたいことをする方法はありますか?さらに悪いことに、ドキュメントによると、 をオーバーライドした場合-loadView、 を呼び出すことは想定されていません[super loadView]

PS。Matt Gallagher の関連記事を見たことがありますが、彼の場合は彼から電話が[super loadView]あり、それは避けたいと思います。

4

1 に答える 1

1

? [super loadView]_ nibName != nil_ loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options_

于 2013-05-10T10:21:20.997 に答える