0

コンテナー ビュー内に uiviewcontrollers を正常に埋め込み、交換しています。ここで、子 uiviewcontrollers から親 uivewcontroller までメッセージを送信したいと考えています。それらをデリゲートとして配線していますが、親ビューでデリゲートとして割り当てる方法がわかりません

parent.h -デリゲートのロード

// Import child delegates
#import "GenWarnDangerVC.h"

@interface Appliance_IPVC : UIViewController <ChildViewControllerDelegate>
{
}

parent.m -子ビューをロード

- (void)viewDidLoad
{
    [super viewDidLoad];

    // * Add child views

    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"ChildFour"]];
    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"ChildOne"]]; // <-- this is the delegate
    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"ChildTwo"]];
    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"ChildThree"]];

    self.currentChildController = self.childViewControllers[0];


    self.currentChildController.view.frame = self.containerView.bounds;
    [self.containerView addSubview:self.currentChildController.view];

    for (UIViewController *controller in self.childViewControllers)
        [controller didMoveToParentViewController:self];

    // Tried making it delegate here, complies but zilch happens
    UIStoryboard *storyboard = self.storyboard;
    GenWarnDangerVC *_GenWarnDangerVC  = [storyboard instantiateViewControllerWithIdentifier:@"ChildOne"];
    _GenWarnDangerVC.delegate=self;

}

後で実行時にスワップインします

[self transitionFromViewController:oldController toViewController:newController duration:0.33 options:options animations:^{} completion:nil];

childview.h - セットアップの委任を行う

#import <UIKit/UIKit.h>

@protocol ChildViewControllerDelegate;

@interface GenWarnDangerVC : UIViewController <UITextViewDelegate>

@property (nonatomic, weak) id<ChildViewControllerDelegate> delegate;

@end


@protocol ChildViewControllerDelegate <NSObject>
- (void)animateTextField:(BOOL)up;
@end

childview.m - 親にメッセージを送る

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
{
    //if ([self.delegate respondsToSelector:@selector(animateTextField:)])
    //{
        // Sending delegate message
        NSLog(@"Sending delegate message");
        [self.delegate animateTextField:YES];
    //}

    return YES;
}

親ビューは応答しません。親ビュー (それ自体) 内で呼び出されたときに [self animateTextField:YES] を処理しますが、子から「聞く」ことはありません。

親ビューで、次のような方法で、子ビューにデリゲートである人を伝える必要があるためだと思います

UIStoryboard *storyboard = self.storyboard;
    GenWarnDangerVC *_GenWarnDangerVC  = [storyboard instantiateViewControllerWithIdentifier:@"ChildOne"];
    _GenWarnDangerVC.delegate=se

lf;

しかし、(a)正確には何ですか?(b) cild ビューがロードされたときに実行されますか? またはそれらが交換されたとき?

4

1 に答える 1

0

問題は、子コントローラーの初期化方法にありました

[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"ChildOne"]];

これによりコントローラーが読み込まれましたが、それ自体への参照は残されていなかったため、デリゲートを割り当てることができました。

ただし、これは行います。わーい。

GenWarnDangerVC * GenWarnDanger_vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildOne"];
[self addChildViewController:GenWarnDanger_vc];
GenWarnDanger_vc.delegate = self;
于 2013-04-10T19:47:07.167 に答える