2012-01-04 22 views
1

UIViewControllerのサブクラスを作成しました。その中で私は、の二つの性質があります。UISegmentedControlを使用して2つのビューを切り替える

@property (nonatomic, retain) IBOutlet UIView *presetsView; 
@property (nonatomic, retain) IBOutlet UIView *customView; 

を私は私の.xibに新しいUIViewのを追加し、その中のいくつかのUI要素を置きます。私は1つのビューを非表示にし、UISegmentedControlが押されたときに別のビューを表示したい。

私の質問はInterface Builderで、IBから私に提供された私の元のViewは、File's Ownerにすでに接続されているアウトレットを持っています。私は自分自身の2つのビュー、プリセット、カスタムを持っているので、どのようにIBでアウトレット接続を行うのですか?

私はIBによって提供された元のビューを削除し、2つの新しいUIViewをキャンバスにドラッグしようとしました。私はそれぞれにコンセントを接続しました。新しいviewControllerをプッシュすると、viewControllerのビューが存在しないというエラーが表示されます。次に、File's Ownerを最初に表示したいビューに表示される「view」コンセントに接続すると、アプリケーションが実行されます。私はこれが正しい方法であるかどうか、そしてそれが正しい方法であるのかどうかはわかりませんでした。 ViewControllerは常に.viewプロパティが必要ですか?それが私がこれをする必要があった理由ですか?ありがとう。

答えて

0

はいすべてのUIViewControllerには1つのルートビューがあります。 -loadViewメソッドが呼び出されたときに、そのビューをnibファイルから読み込んだり(その結果としてviewプロパティを設定する)、またはプログラムで作成することによって、そのビューを構築できなければなりません。

あなたの場合は、viewプロパティビューだけを残しておき、それをスワップしないでください。このルートビューはすでにウィンドウに追加されており、コントローラの参照を他のオブジェクトを指すように変更すると、混乱と未定義の動作が発生します。代わりに、両方のビューをコントローラのルートビューのサブビューとして追加し、必要に応じて非表示または表示します。

1

書き込みアクションUISegmentedcontrolための方法および

以下のような方法implemnt - (IBAction)selectMessageType {

noResultsPriview.hidden = YES; 
//[activityIndicator startAnimating]; 

switch (msgOptionControl.selectedSegmentIndex) { 

    case 0: 

// VIEW1 ブレークのためのコードは、

case 1: 

// view2 breakのコード。

case 2: 

// view3のコード break;

case 3; 
     //code for view4 
     break; 


    default: 
     break; 

} 

}

0

あなたのケースで、それはXIB作成時に作成originalのUIViewことができるようのUIViewControllerが有効なのUIViewを持っている必要があります。あなたの2つのUIViewプロパティが正しいです。 presetsVieworiginal UIViewの間の接続をIBにセットアップして後で元に戻すことができるようにするには、他のUIViewにcustomViewを接続する必要があります。

元のUIViewには、UIViewController(オーナー)のビューとpresentsViewのビューの2つの接続があります。

これらの接続は、UIViewControllerのオブジェクトを操作するために使用できるように、ポインタにすぎません。

関連する問題