2

IBのUITableViewのみで構成されるXIBを作成しました。UITableViewControllerをサブクラス化し、xibを完全に廃止することが可能であることに気づきました。

私の質問は、どうやってこれを行うのですか?

これまでのところ、私が変更したのは私の.hだけです...

   @interface MyView : UITableViewController

XIBを削除しました。明らかに、次のようなエラーが発生します

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Could not load NIB in bundle: 'NSBundle  (loaded)' with <path>
 name 'MyView''

だから私の質問は、このサブクラス化を正しく達成するために他に何が残っているのかということです。

4

2 に答える 2

4

iOSでViewControllerを設定する方法は2つあります。

  • .xibファイルを使用する場合:-initWithNibName:bundle:最初の引数として.xibファイルの名前を渡し、nil2番目の引数として(高度な処理を行っている場合を除く)を使用して、ViewControllerをインスタンス化します。OSは.xibファイルを探し、それを一連のオブジェクトにシリアル化解除して、ViewControllerにアタッチします。次に、OSがView Controllerサブクラスの-viewDidLoad:メソッドを呼び出し、設定が完了します。
  • プログラムで:ビューコントローラを、、-initまたはテーブルビューコントローラの場合はでインスタンス化しますinitWithStyle:。次に、OSはサブクラスの-loadViewメソッドを呼び出し、ビュー階層を手動でインスタンス化します。

-initWithStyle:の代わりにでインスタンス化する必要があるようです-initWithNibName:bundle:

于 2013-01-30T22:01:03.350 に答える
0

.xibのないViewControllerがある場合は、ロードされたビューなどでテーブルビューを作成できます。

UITableView *table = [[[UITableView alloc] initWithStyle:UITableViewStylePlain] autorelease];
table.dataSource = self;
table.delegate = self;
table.frame = CGRectMake(0, 10, self.view.frame.size.width, self.view.frame.size.height);
[self.view addSubview:table];

次に、UITableViewControllerの場合と同様に、適切なデリゲートメソッドとデータソースメソッドを実装する必要があります。

于 2013-01-30T21:50:22.120 に答える