コンテナー ビュー内に 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 ビューがロードされたときに実行されますか? またはそれらが交換されたとき?