ストーリーボードからの再利用ビュー

私はカスタムセクションヘッダーを持つテーブルビューを持っています。セクションヘッダーのビューはストーリーボードで定義され、インスタンス変数に配線されます。ストーリーボードからビューの新しいインスタンスをリクエストする方法はありますか?

過去に私はセクションヘッダーを独自のxibファイルに定義して、これを使用して新しいインスタンスを取得しました。

[[NSBundle mainBundle] loadNibNamed:@"TimerViewSectionHeader" owner:self options:nil];
UIView *newHeaderView = self.sectionHeaderView;
6

5 答え

私は同じことをやろうとしたが、同じ問題に遭遇した。

私はストーリーボードで多くのことをしたいと思っていました。しかし、ビューを再利用する必要があるとすぐに、それらを UIViewController サブクラスと一緒に別のペン先に配置することは非常に意味があります。

再利用したビューを表示する場所に汎用の UIView を置き、ViewControllerを使用してビューを追加することができます。

[myReusableViewController loadView];
[myReusableViewController viewDidLoad];//You have to handle view callbacks yourself.

[self.myReusableViewPlaceholder addSubview:myResusableViewController.view];
[myReusableViewController viewWillAppear:YES];

だからそれを要約する:

  • ストーリーボードを使用すると便利です
  • アプリケーションの足場をストーリーボードに静的ビュー([バージョン情報]など)とともに作成します。
  • カスタムnib + UIViewController サブクラスで再利用ビューを作成し、ストーリーボードに UIView プレースホルダを追加します。

In another answer I thought about some Pros and Cons of Storyboard

3
追加された
@Rhubarb私はあなた自身がコールバックをしなければならないと100%確信しているわけではありませんが、ビューを埋め込むと、コールする責任があります。 iOS6.0では、Embed Segueを使用して現在のView Controllerの領域にViewController全体を埋め込むための新しいメカニズムがあることに注意してください。これもオプションかもしれない。
追加された 著者 Besi,
コールバックを自分で呼び出す必要があると確信していますか?
追加された 著者 Rhubarb,
それにもかかわらず、プレースホルダとしてUIViewを使用するというアイデアは+1です。上記のKrejkoの答えと組み合わせることができます。コントローラをペン先からロードする代わりに、ストーリーボードからコントローラをロードしてください(1つのストーリーボードを使用してさまざまなビューを保持できます)
追加された 著者 Rhubarb,

私はそれをする方法があるとは思わない。最善の策は、別のペン先にtableviewカスタムヘッダービューを配置し、コードサンプルで使用したときと同じように読み込むことです。

3
追加された
私の+1。ストーリーボードは、私のアプリのUIをレイアウトするための新しく改善された方法だと思ったので、私は何時間もテーブルヘッダービューをストーリーボードの方法でやってみようと努力しました。残念ながら、Storyboardを使用することはこの部門では実現できません。最良の解決策は、ビューのペン先をロードするか、コードでビューを構築する古い方法に戻すことです。私は本当に私のアプリのすべてのUIが1つのストーリーボードファイルで実行できると信じたかったが、これは間違いありません。
追加された 著者 ozz,

私はちょうどビューについてはわかりませんが、私がストーリーボードからView Controllerを取得できる方法は次のとおりです。

UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IdentifierName"];

ここからは、おそらくニブでこれをやったのと同じようにこれを使うことができます。

3
追加された
これは正解とマークする必要があります
追加された 著者 Yariv,

私がこれを思いついた解決策は次のとおりです:

私は複雑なデータを表示する複数のプロトタイプのセルを持つテーブルビューを持っています。詳細ビューへのセグがあり、トランザクションプロセスビューがあります。

この最初のテーブルビューには、結果を含む新しいテーブルビューを表示する検索ボタンがあります。それはそれをプッシュするメインテーブルビューと同じ機能が必要です。ディテールやトランザクションの進捗状況を確認するためのセグを含む:

ストーリーボードで、メインのテーブルビューを選択してコピーします。選択を解除して貼り付けます。メインテーブルビューから2番目のテーブルビューにプッシュセグを作成します。これまでどこからでもナビゲートしたい場所から選択することができます。必要に応じて2番目のテーブルビューを変更します。 IE:いくつかのUIの変更が必要な場合は問題ありません。

メインのtableviewを実行しているviewcontrollerのサブクラスである新しいviewcontrollerクラスを作成します。

サブクラス内のデータデリゲートをオーバーライドして、必要なデータのサブセットを提供します。

ストーリーボードに戻り、2番目のテーブルビューコントローラを選択し、アイデンティティインスペクタでサブクラスをカスタムクラスとして選択します。

このソリューションがスムーズに動作するためには、アプリは実際にビューのデータを管理する必要があります。あなたはprepareforsegueを使って1番目のテーブルビューから2番目のテーブルビューにデータを渡すことができましたが、私は多くの観点からはるかに柔軟なアプリケーションデータモデルを見つけました。

segueを介してサブビューにプッシュするボタンがない限り、サブクラスはセグを介してIDを使用してプッシュする関数をオーバーライドする必要があります。 NB Seguesは、あなたがそれらのIDをまったく持っていれば、一意の識別子を持たなければなりません。

これを理解するには多くの試行錯誤が必要でしたが、コンセプトを理解すると、それはかなりスムーズな解決策であり、実装にはあまり適していません。

3
追加された

ストーリーボードでビューを再利用することができました.1つのテーブルビューから再利用したいビューへの遷移を接続するだけです。

私が再利用したいと思う私のtableviewは2回指される。 それは仕事の並べ替えが、私はそれを実行している問題は、再利用する私のテーブルビューに私のアプリケーションの代理人で変数を(instantiateViewControllerWithIdentifierを使用して)設定している。 私が再利用すると、ストーリーボードが私のテーブルビューの2つのインスタンスを作成していて、instantiateViewControllerWithIdentifierで取得したものが私が望むものではないようです。

これが正しい方法であるかどうかは本当に分かりません。しかし、私は他の多くの人がこれをやっていると思います。ストーリーボードのカスタム表のセルで、私は多くの人々が自分の意見を再利用したいと考えています。

0
追加された