忍者ブログ
AMAZON
フリーエリア
最新コメント
広告
インテル製チップセットを搭載し、基本機能の充実、メンテナンス性も向上した高性能なクライアントPC Endeavor AT971 HP Directplus オンラインストア
42 41 40 39 38 37 
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

投稿者 : かおん [編集]
子のクラス(ContaonerViewController)のヘッダファイル

ContaonerViewController.h

#import <UIKit/UIKit.h>

@protocol ChildContainerDelegate;  // << 前置宣言

@interface ContainerViewController : UIViewController

@property (nonatomic,assign) id<ChildContainerDelegate> delegate;  // delegateの宣言

@property (weak, nonatomic) IBOutlet UILabel *MyLabel;

-(void)myfunc;

@end

// delgateの定義

@protocol ChildContainerDelegate <NSObject>

// Delegate用関数の定義(必ず実装しないといけない)

-(void) sampleA:(NSString *)message;

@optional

// Delegate用関数の定義(Optionalの配下では、必ずしも実装しなくてもよい)

-(void) sampleB:(NSString *)message;

@end

1.Delegateに名前をつける。"ChildConatinerDelegate"

2.子のクラスで、Delegateを使用することを宣言する。
  プロトコルの宣言とプロパティの宣言
   @protocol ChildContainerDelegate;
   @proparty (nonatomic, assign) id<ChildContainerDelegate> delegate;

*propartyは、@interface~@endに記載する。

3.delegateの定義
   delegateで使用する関数を定義する。
   @protcol ChildCOnatinerDelegate <NSObject>

   @end
   (引数なし)
   -(void) sampleC;

ContaonerViewController.m


#import "ContainerViewController.h"



@interface ContainerViewController ()


@end



@implementation ContainerViewController


@synthesize delegate=_delegate;


- (void)viewDidLoad {


    [super viewDidLoad];


}



- (void)didReceiveMemoryWarning {


    [super didReceiveMemoryWarning];


}



-(void)myfunc{


    _MyLabel.text = @"FUNC";


}



- (IBAction)MyButton2:(id)sender {


    NSLog(@"BUTTON2");


    //親クラスにイベントを発火させる(関数A)


    //respondsToSelectorで実装されているかどうかを調べてから発火する。


    if( [_delegate respondsToSelector:@selector(sampleA:)]){


        [_delegate sampleA:@"MESSAGE_DELEGATE_FUNCTION"];


    }


    //親クラスに実装されていないイベントを発火させる(関数A)


    if( [_delegate respondsToSelector:@selector(sampleB:)]){


        [_delegate sampleB:@"MESSAGE_DELEGATE_FUNCTION"];


    }


}


@end


1.delegateの名前を宣言する
   @synthesize delegate=_delegate;
   //実は、XCode4以降必要ない。(_delegate以外の名前を使用したい場合は記述する)
2.親クラスにイベントを発火させる。
   _delegate sampleA:["MESSAGE_DELEGATE_FUNCTION"];
   事前に実装されているか調べて実行したほうがいい。
   [_delegate respondsToSelector:@sekector(SampleA:)]で調べられる。

ViewController.h

#import <UIKit/UIKit.h>

#import "ContainerViewController.h"

@interface ViewController : UIViewController <ChildContainerDelegate>

@property (weak, nonatomic) IBOutlet UILabel *lbl;

@end

1.クラスにdelegateを使用することを宣言する
   @inteface ViewController : UIViewContorller <ChildContainerDelegate>

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) NSString *currentSegueIdentifier;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    for (id childview in self.childViewControllers) {

        ContainerViewController *cview = childview;

        if ([cview.title  isEqualToString:@"ChildContainer1"]){

            cview.delegate = self;

        }

    }

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}

// delegateが呼び出された時に、labelの内容を変更する

-(void)sampleA:(NSString *)Message{

    NSLog(@"DELEGATE:%@", Message);

    _lbl.text = @"DELEGATE";

}

- (IBAction)Button1:(id)sender {

    for (id c in self.childViewControllers) {

        ContainerViewController *cview = c;

        if ([cview.title  isEqualToString:@"ChildContainer1"]){

            [cview myfunc];

        }

    }

}

@end

View
PR
投稿者 : かおん [編集]

COMMENT

ADD YOUR COMMENT

NAME
TITLE
MAIL
URL
COMMENT
PASS