3

2 つのモードを持つコンテンツの画面を制御する VC があります。通常モードと編集モード。

それぞれ別の nib からの 2 つのビューを持つ 1 つの VC を作成できますか?

iphone の多くの状況では、関連付けられたビューを制御する VC があります。次に、ボタンの押下またはその他のイベントで、新しい VC がロードされ、そのビューが最上位ビューなどになります。

しかし、この状況では、同じ VC を使用したい 2 つのモードがあります。これらは密接に関連しているためです。だから私は2つのビューをスワップイン/アウトできるVCが欲しい.

こちらのとおり: Interface Builder で作成された nib ファイルを使用して UIView をロードする方法

nib から関連付けられたビューで VC をロードし、後で別の nib から別のビューをロードして、その新しいビューをアクティブなビューにすることができることがわかりました。

NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"EditMode" owner:self options:nil];
UIView *theEditView = [nibObjects objectAtIndex:0];
self.editView = theEditView;
[self.view addSubview:theEditView];

セカンダリ ニブには、プライマリ ニブと同様に VC に配線されたアウトレットがあります。新しいニブがロードされると、コンセントはすべて正常に接続され、すべてがうまく機能します. 残念ながら、この編集ビューを削除すると、元の nib から (通常モードの) ビューにアウトレットを再び接続するエレガントな方法はないようです。ニブの装着とコンセントのセッティングは一度きりのようです。

では、新しい VC を作成せずに 2 つのビューをスワップイン/アウトする VC が必要な場合、どのようなオプションがありますか?

1) コードですべてを行うことができますが、UI の作成が簡単になるため、ペン先を使用したいと考えています。

2) VC にペン先が 1 つあり、UIView とそのサブクラスの隠しプロパティを使用して要素を非表示/表示するだけです。

3) 上記のように新しいペン先をロードします。これは新しいペン先では問題ありませんが、元のペン先に戻ったときにアウトレットをどのように並べ替えるのでしょうか。

4) VC と nib を 1:1 にすることをあきらめて受け入れる。通常モード用のペン先、編集モード用のペン先があり、各モードには共通のスーパークラスをサブクラス化する VC があります。

最終的に、私は 4) を使用して動作しましたが、通常モードでインスタンス化するモデル クラスがあり、編集モード VC に渡す必要があるため、かなりの量の追加作業が必要です。両方のモードがアクセスする必要があるためです。モデル。私も NSTimer を使用しており、各モードでタイマーを開始および停止する必要があります。そもそも 2 つのペン先を持つ 1 つの VC が必要だったのは、このすべての共有機能のためです。

4

1 に答える 1

0

元の nib に別のビューを追加し、それを「editView」という別の IBOutlet に接続します。

@interface TestViewController : UIViewController {
    IBOutlet UIView *editView;
}
@end

代替テキスト

次に、[self.view addSubview:theEditView]; を実行できます。表示する必要があるときはいつでも。

于 2010-04-23T01:21:05.847 に答える