1

(ストーリーボードで設計、下のスクリーンショット) rootviewcontroller のビューに 2 つのサブビューがあります

ここに画像の説明を入力

私のコードでは、各サブビューに個別のビュー コントローラーを割り当てたいと考えています。つまり、tableViewController を TableView に割り当てます。

これをawakeFromNib(またはViewDidLoad)メソッドで実行しようとしましたが、役に立ちませんでした。テーブルビュー コントローラーのデリゲート メソッドが呼び出されることはありません。ストーリーボードは、割り当てたテーブルビューコントローラーが何かを実行する前であっても、ここでサブビューをロードする仕事をしていると思います。

self.myTableViewController = (TodoListViewController *)[[UITableViewController alloc]  initWithStyle:UITableViewStylePlain];
self.myTableView.delegate = self.myTableViewController;
self.myTableView.dataSource = self.myTableViewController;
self.myTableViewController.tableView = self.myTableView;

ストーリーボードにこのようなビューがある場合、または何か間違ったことをしている場合にこれが許可されているかどうかわかりませんか?

4

4 に答える 4

1

同じような悩みを抱えていたのでこちらのサイトにたどり着きました。実際、私はまったく同じことをしています.2つのサブビューを持つビューコントローラーがあります(すべて多くの制約を持つストーリーボードで定義されています)。

viewDidLoad の containerviewcontroller で、私はあなたと同じ呼び出しを行っています (ただし、最初にビューを定義しました):

self.myTableViewController = (TodoListViewController *)[[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
self.myTableViewController.tableView = self.myTableView;
self.myTableView.delegate = self.myTableViewController;
self.myTableView.dataSource = self.myTableViewController;

それは私にとってはうまくいきます(ここにあなたの問題があると思います.Navigation Controllerがありません....そして、テーブルビューのアウトレットがストーリーボードで実際に接続されていることを確認してください.)。

しかし、本当の問題は正しい配線の後で発生します。セルにタブで移動する場合、おそらくいくつかの cellID を nextView に指定する必要があります。tableviewcontroller を手動で定義したため、デリゲート メソッド didSelectRowAtIndexPath のみが呼び出され、prepareForSegue は呼び出されません。

ストーリーボードからビューコントローラーをインスタンス化して遊んでみました

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"aStoryboard" bundle:nil];
self.myTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"myTableViewID"];

しかし、セグエは呼び出されませんでした。このテーブルビューコントローラーはナビゲーションコントローラーによって管理されていないため、直接呼び出す (performSegueWithIdentifier:...) は機能しませんでした。

私にとっては、サブビューコントローラーへの呼び出しを委任できる containerViewController で prepareForSegue メソッドが呼び出されることになりました。

EDIT:実際には、本当の解決策はDON'Tです。ビューに追加できる「コンテナー ビュー」オブジェクトがあり、子ビュー コントローラーを含めることができるビュー コントローラーの領域を定義します。これが私が本当にやりたかったことです。

于 2012-12-20T12:36:29.903 に答える
0

たとえば、UISplitViewController に似たカスタム コンテナ コントローラを自分で作成したいようです。UIViewController class referenceでこれを行うことに関する Apple の簡単なドキュメントを次に示します。viewDidLoad:たとえば、コンテナ コントローラのまたはviewWillAppear:メソッドでプログラムによって子コントローラをインスタンス化できます。ただし、IB に子をインスタンス化させることはできないと思いますが、同じ方法で、タブ バーやナビゲーション コントローラーとその子との関係を結び付けることができます。(方法があれば知りたいです!)

于 2012-08-13T05:14:49.667 に答える
0

viewDidLoad メソッドで再試行してください。これが最も簡単な答えです。メソッドがロードされていない場合は、メソッド内の他のものを調べる必要がある場合があります。これは、ストーリーボードを使用することが多いアプリケーションが大きい場合、メソッドが競合している可能性があるためです。

私もこれを見ます: http://blog.waynehartman.com/archive/2012/01/07/uistoryboard-on-ios-5-the-good-the-bad-and-the.aspx

ストーリーボード機能をプログラムで使用するときに人々が犯す最も一般的な事故を示しています

それが役立つことを願っています!

于 2012-07-08T15:09:57.140 に答える
-1

通常、クラスとデリゲートをすべてストーリーボードに設定するのが最も簡単です (これを含む多数のチュートリアルで示されているように)。

本当にスクロール ビューとテーブル ビューを同じビューに入れようとしている場合は、 を調べる必要があります。UIViewController instantiateViewControllerWithIdentifier:複数のビュー コントローラーを合理的に簡単にプルできます (理想的には、適切なクラス、デリゲート、およびソースがストーリーボードに設定されている場合)。 ) でそれらのビューを外側のラッパー ビューに追加します。私はこれを行っており、かなり簡単にクールなことを行うことができますが、通常は最もクリーンな方法ではありません。

于 2012-07-09T20:47:37.327 に答える