4

この行を使用できるように、コードからストーリーボードにアクセスしようとしています。

DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];

マップビューとリストビューで使用していますが、別の場所で使用したいと考えています。問題は、このビューが別のビューのサブビューであるということです。

次のように設定されています。

thisBigViewは、ストーリーボードに追加したビューです。ストーリーボードではThisBigViewController 、そのビューに別のビューを追加しました。これをthisSmallViewと呼びましょう。クラスはに設定されThisSmallViewます。

ThisSmallViewは、ビュー上で動的にボタンを生成するカスタムビューです。これらのボタンは、次のアクションを呼び出します。

-(void) radarEventClick:(UIButton *)sender{
    SingletonManager *sharedManager = [SingletonManager sharedManager];

    DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"]; // PROBLEM 1

    Event *a;
    for(int i = 0; i < [sharedManager.eventsManager count]; i++){
        if(sender.tag == ((Event*)([sharedManager.eventsManager objectAtIndex:i])).id_nr){
            a = [sharedManager.eventsManager objectAtIndex:i];
            break;
        }
    }

    [detail setEvent:a];

    [self.navigationController pushViewController:detail animated:YES];    // PROBLEM 2

}

これは、mapviewcontrollerでannotationdisclosureクリックに応答するために使用しているコードであり、ここで使用したいのですが、2つの問題があります。

問題1:thisSmallViewはanotherviewのサブビューであるため、ストーリーボードに直接アクセスできず、そのアクセスを取得する方法がわかりません。

問題2:thisBigViewはに埋め込まれてnavigationcontrollerいますが、thisBigViewにアクセスするユーザーがわからないため、にアクセスできませんnavigationcontroller

(問題2を解決できれば、自動的に問題1を解決できると思いますか?)

-編集:私が試したこと-

DetailViewController *detail = [self.superview.storyboard instantiateViewControllerWithIdentifier:@"detail"];   

しかし、「UIView*タイプのオブジェクトにプロパティストーリーボードが見つかりません」というメッセージが表示されます。

4

2 に答える 2

4

スーパービュー

[smallView superview]

http://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instp/UIView/superview

于 2012-07-23T12:11:54.220 に答える
3

インターフェイスビルダーでスーパービューのプロパティとしてサブビューを追加します(ヘッダーファイルにcontrolキーを押しながらドラッグします)。UIViewController次に、サブビューにプロパティを追加します。スーパービューのコードで、

nameOfSubView.superViewPropertyName = self;
于 2012-07-23T13:35:59.160 に答える