0

そのため、セグエがプッシュの場合 (prepareForSegue メソッド内)、あるビュー コントローラーから次のビュー コントローラーにデータを渡すためのチュートリアル (およびテクニックを使用している) のほとんどを見てきました。をカスタム クラスにキャストし、destinationViewControllerデータをカスタム プロパティにプッシュできます。

ただし、Embed Segue (コンテナー ビューを機能させる iOS6 の新しいもの) に対してこれを実行しようとすると、destinationViewController が正しくないようです。これは単なる UIViewController であり、ストーリーボードで定義したカスタム クラスではありません。

ストーリーボードの例

ご覧のとおり、開始日と終了日を含むメイン テーブル ビューがあります。次に、Container View を使用してサブビューを埋め込みます。これには、コマンドの日付用のツールバーと UIDatePicker があります。

私の問題は、日付ピッカー (UIControlEventValueChangedラベルを更新するもの) からのイベント リスナーを持つメイン テーブル ビュー コントローラーが必要なことです。親コントローラーは日付ピッカーを見ることができません。どちらのビュー コントローラーにもカスタム クラスが実装されています。日付ピッカー コントローラー クラスには IBOutlet オブジェクトとして日付ピッカーがあり、3 つの日付範囲ボタンには日付を変更するメソッドが選択されています。

ここでの問題は、2 つのビュー コントローラー間のコンテキストにあるようです。

参考までに: 日付ピッカー ウィジェットとツールバーの表示を切り替えることができるように、それらを別々にする必要があります。

更新 1:

親レベルの準備セグエにある回避策を見つけました。親ビューコントローラータイプのプロパティを持つ子に「自己」参照を渡します。これにより、子にその親への適切な参照が与えられます。これを使用して、次のことができます。

-(void) viewDidLoad {
    [[self datePicker] addTarget:[self graphSettingsViewController] action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
}

これは機能しますが、「面倒」に感じます。何か案は?

4

3 に答える 3