0

これは私のストーリーボードです:

ここに画像の説明を入力

UITableViewController には、画像、ラベル、およびスイッチを持つ一般的な UITableCell (MMSwitchTableCell) があります。

アイデアは、同じレイアウト、つまり同じセル オブジェクトと同じ動作で異なるデータを提示する異なる UITableViewControllers を作成できるようにすることです。たとえば、UITableView には果物を選択するのに役立つセルのリストがあり、2 番目の UITable は家具を選択するのに役立ちます。2 つの UITablesViewController の間には関係がありません (継承や集約はありません)。それらは異なる viewController の異なるインスタンスです。設計されたコントロールと UITableCell コードを再利用したいだけです。

したがって、私のコードには、プロパティを宣言する UIViewController があります。

@property (strong, nonatomic) MMGoSeePopoverTableViewController* goSeePopoverTableViewController;

そしてそれを遅延ロードします:

-(MMGoSeePopoverTableViewController*) goSeePopoverTableViewController
{
    if(_goSeePopoverTableViewController == nil)
    {
        _goSeePopoverTableViewController =(MMGoSeePopoverTableViewController*)
        [self.storyboard instantiateViewControllerWithIdentifier:@"switchPopover"];
    }

    return _goSeePopoverTableViewController;
}

そして、プロパティを宣言する 2 番目の UIViewController:

 @property (strong, nonatomic) MMLayersPopoverTableViewController* layersPopoverTableViewController;

そしてそれを遅延ロードします:

-(MMLayersPopoverTableViewController*) layersPopoverTableViewController
{
    if(_layersPopoverTableViewController == nil)
    {
        _layersPopoverTableViewController =(MMLayersPopoverTableViewController*)
        [self.storyboard instantiateViewControllerWithIdentifier:@"switchPopover"];
    }

    return _layersPopoverTableViewController;
}

ストーリーボードでは、カスタム クラスを MMLayersPopoverTableViewController に設定しましたが、代わりに空白のままにして、何らかの形でコードに設定したいと考えています。遅延ローダー内でこれを行う必要があると思いますが、方法がわかりません。

編集

提案された「この質問には既に回答がある可能性があります:」は、私が求めているものと同じではありません。私の問題をよりよく説明するために投稿を修正しました。

4

1 に答える 1

0

アイデアは、同じレイアウト、つまり同じセルオブジェクトと同じ動作で異なるデータを提示する異なる UITableViewControllers を作成できるようにすることです。

これは、ストーリーボードの代わりに .xib ファイルを使用する必要がある場合のように思えます。.xib ファイルと比較したストーリーボードの利点は、ビューと対応するビュー コントローラーの観点からアプリの構造を確認できることです。ただし、あなたの場合、同じビューを異なるビュー コントローラーで再利用しようとしています。ビュー コントローラーが所有する .xib ファイルにテーブルを配置すると、インスタンス化することを決定したビュー コントローラーを使用して、同じテーブル、セルなどを読み込むことができます。

.xib ファイルで、File's Owner プロキシのタイプを、すべての必要な機能を含むすべてのビュー コントローラー クラスの共通のスーパークラスに設定します。たとえば、すべてのView Controllerがから派生してUITableViewControllerおり、特別なアウトレットが必要ない場合は、タイプを に設定しUITableViewController、テーブルをプロキシのtableViewアウトレットに接続します。ビュー コントローラーに他の一般的な動作がある場合は、それらすべてを のサブクラスに入れ、それをUITableViewControllerプロキシの型として使用し、そのクラスから他のビュー コントローラーを派生させます。

すべての作業が完了したら、-initWithNibName:bundle:メソッドを使用して任意のビュー コントローラーを初期化し、同じビューをロードできます。

// in one place...
MMGoSeePopoverTableViewController *goSeeVC = [[MMGoSeePopoverTableViewController alloc]
                                              initWithNibName:@"CommonTableView.xib" bundle:nil"];
// and in some other place...
MMLayersPopoverTableViewController *layersVC = [[MMLayersPopoverTableViewController alloc]
                                              initWithNibName:@"CommonTableView.xib" bundle:nil"];
于 2013-08-27T02:53:35.470 に答える